Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add General purpose API wrapper util #5534

Merged
merged 10 commits into from
Dec 3, 2024

Conversation

amishas157
Copy link
Contributor

@amishas157 amishas157 commented Nov 14, 2024

PR Checklist

PR Structure

  • This PR has reasonably narrow scope (if not, break it down into smaller PRs).
  • This PR avoids mixing refactoring changes with feature changes (split into two PRs
    otherwise).
  • This PR's title starts with name of package that is most changed in the PR, ex.
    services/friendbot, or all or doc if the changes are broad or impact many
    packages.

Thoroughness

  • This PR adds tests for the most critical parts of the new functionality or fixes.
  • I've updated any docs (developer docs, .md
    files, etc... affected by this change). Take a look in the docs folder for a given service,
    like this one.

Release planning

  • I've reviewed the changes in this PR and if I consider them worthwhile for being mentioned on release notes then I have updated the relevant CHANGELOG.md within the component folder structure. For example, if I changed horizon, then I updated (services/horizon/CHANGELOG.md. I add a new line item describing the change and reference to this PR. If I don't update a CHANGELOG, I acknowledge this PR's change may not be mentioned in future release notes.
  • I've decided if this PR requires a new major/minor version according to
    semver, or if it's mainly a patch change. The PR is targeted at the next
    release branch if it's not a patch change.

What

This PR adds a general purpose API wrapper which could be used to call any API endpoint with given query params and headers.
There are two modules added:

  • Client: Contains function to call an API. This supports retries in case there are throttling or service unavailable.
  • Request: Contains function to build requestBody with given inputs such request type, headers etc

Also updated httptest library to support mocking http request when we want to see multiple results on subsequent api calls. This is particularly helpful when we want to test whether API retries work as expected or not.

Why

This will be used in stellar-etl to invoke various APIs-retool, github etc to fetch data and store in bigquery for analytics.

Known limitations

I did not add support for pagination as we don't have a use case as of now. However, this util can be extended in future as needed.

Questions

I am not sure if this is right place to add this library. I am open to relocating it where it finds better fit.

@amishas157 amishas157 changed the title Add basic util to request api Add General purpose API wrapper util Nov 18, 2024
@amishas157 amishas157 marked this pull request as ready for review November 18, 2024 22:17
utils/apiclient/client.go Outdated Show resolved Hide resolved
utils/apiclient/client.go Outdated Show resolved Hide resolved
utils/apiclient/client.go Outdated Show resolved Hide resolved
utils/apiclient/request.go Outdated Show resolved Hide resolved
Copy link
Contributor

@chowbao chowbao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good and doesn't need any functional changes
Just added some nits and stylistic recommendations

Copy link
Contributor

@chowbao chowbao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@amishas157 amishas157 merged commit e7f96aa into master Dec 3, 2024
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants