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

Refactor Amazon Product API endpoints #174

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

leesharma
Copy link
Collaborator

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:

  1. It should be easy to add new endpoints.
  2. It should be easy to fix general query-related bugs unrelated to a specific endpoint.

To do this, I extracted the general Amazon Product API logic into an Endpoint class. Adding a new endpoint is now as simple as subclassing Endpoint and specifying the request parameters and any response post-processing.

Documentation

The AmazonProductAPI lib is getting more complicated and self-contained, so I added a README 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

  • Refactor
  • Documentation update

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.)

@leesharma leesharma added the WIP label Oct 26, 2017
@micahbales micahbales temporarily deployed to project-playtime-stagin-pr-174 November 21, 2017 03:33 Inactive
@leesharma leesharma force-pushed the api-client branch 2 times, most recently from 39f2301 to 908d53b Compare November 29, 2017 03:15
@leesharma leesharma changed the title [Waiting on #173] Refactor Amazon Product API endpoints Refactor Amazon Product API endpoints Nov 29, 2017
@leesharma leesharma removed the WIP label Nov 29, 2017
I'm pretty torn on this commit-an abstract superclass doesn't seem like
a very ruby thing to do. Maybe I've been doing too much Java?

There are two main goals of this commit:

  1. It should be trivial to add new endpoints. We're going to have to
     add a few more, and being able to customize only the specialized
     bits will save a ton of time and prevent bugs.

  2. Shared code should exist in one location. Already, we've got a bug
     in our signing process, and keeping this all in a superclass means
     we only need to fix it in one place.

I don't like how I'm handling `@aws_credentials` at the moment
(requiring each subclass to initialize it); any ideas of a better way to
handle it?
Since the instructions are getting more complicated, this commit adds a
README (with new endpoint instructions) to the Amazon Product API. This
has three benefits:

  * It keeps the root README clean and relevant to most people.
  * It allows us to go into more documentation detail.
  * It facilitates an eventual extraction of the Amazon Product API lib.

It might be worth extracting more from the "Getting Amazon Product
Advertising API Working Locally" section into the lib README, but for
now there's just endpoint information.
Whenever the tests run, the following error appeared:

    warning: already initialized constant AWSTestCredentials

This moves the AWSTestCredentials init from the individual specs to a
spec helper class: `spec/support/helpers/amazon_helpers.rb`.
@mxygem
Copy link
Collaborator

mxygem commented Nov 30, 2017

I'm all for modularization and templating, especially when it makes things easier in the future! 👍

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