Refactor Amazon Product API endpoints #174
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Works towards #62 (part 2/3)
Description
I broke #62 into three PRs for easier review: this is part 2. (part 1: #173)
There were two main changes in this PR: refactoring the endpoints and adding documentation.
Refactoring the Endpoints
I had two main goals here:
To do this, I extracted the general Amazon Product API logic into an
Endpoint
class. Adding a new endpoint is now as simple as subclassingEndpoint
and specifying the request parameters and any response post-processing.Documentation
The
AmazonProductAPI
lib is getting more complicated and self-contained, so I added aREADME
with instructions on how to add a new endpoint. That way, we get the documentation without cluttering up the root README.At some point, it might be worth extracting more API-related instructions from the root README into here, but I held off for now.
Risks/Tradeoffs
I'm not sure how you all feel about abstract superclasses with subclass callbacks in ruby. 😬 I may have written too much Java lately.
I think this implementation makes the API wrapper easier to extend/maintain (especially since we know we'll need to add more endpoints/fix some signing bugs soon), but let me know if you think it's needlessly complicated. We can just skip this PR; it won't affect the issue.
Type of change
How Has This Been Tested?
No new behavior was added, but the specs in
spec/lib/amazon_product_api/*_spec.rb
still pass (+ the rest of the test suite.)