Class: Peddler::API
- Inherits:
-
Object
- Object
- Peddler::API
- Defined in:
- lib/peddler/api.rb
Overview
Wraps an Amazon Selling Partner API (SP-API)
Direct Known Subclasses
Peddler::APIs::AmazonWarehousingAndDistribution20240509, Peddler::APIs::AplusContent20201101, Peddler::APIs::ApplicationIntegrations20240401, Peddler::APIs::ApplicationManagement20231130, Peddler::APIs::CatalogItems20201201, Peddler::APIs::CatalogItems20220401, Peddler::APIs::CatalogItemsV0, Peddler::APIs::DataKiosk20231115, Peddler::APIs::EasyShip20220323, Peddler::APIs::FBAInboundEligibilityV1, Peddler::APIs::FBAInventoryV1, Peddler::APIs::Feeds20210630, Peddler::APIs::Finances20240619, Peddler::APIs::FinancesV0, Peddler::APIs::FulfillmentInbound20240320, Peddler::APIs::FulfillmentInboundV0, Peddler::APIs::FulfillmentOutbound20200701, Peddler::APIs::Invoices20240619, Peddler::APIs::ListingsItems20200901, Peddler::APIs::ListingsItems20210801, Peddler::APIs::ListingsRestrictions20210801, Peddler::APIs::MerchantFulfillmentV0, Peddler::APIs::MessagingV1, Peddler::APIs::NotificationsV1, Peddler::APIs::OrdersV0, Peddler::APIs::ProductFeesV0, Peddler::APIs::ProductPricing20220501, Peddler::APIs::ProductPricingV0, Peddler::APIs::ProductTypeDefinitions20200901, Peddler::APIs::Replenishment20221107, Peddler::APIs::Reports20210630, Peddler::APIs::SalesV1, Peddler::APIs::SellersV1, Peddler::APIs::ServicesV1, Peddler::APIs::ShipmentInvoicingV0, Peddler::APIs::ShippingV1, Peddler::APIs::ShippingV2, Peddler::APIs::SolicitationsV1, Peddler::APIs::SupplySources20200701, Peddler::APIs::Tokens20210301, Peddler::APIs::Uploads20201101, Peddler::APIs::VendorDirectFulfillmentInventoryV1, Peddler::APIs::VendorDirectFulfillmentOrders20211228, Peddler::APIs::VendorDirectFulfillmentOrdersV1, Peddler::APIs::VendorDirectFulfillmentPaymentsV1, Peddler::APIs::VendorDirectFulfillmentSandboxTestData20211028, Peddler::APIs::VendorDirectFulfillmentShipping20211228, Peddler::APIs::VendorDirectFulfillmentShippingV1, Peddler::APIs::VendorDirectFulfillmentTransactions20211228, Peddler::APIs::VendorDirectFulfillmentTransactionsV1, Peddler::APIs::VendorInvoicesV1, Peddler::APIs::VendorOrdersV1, Peddler::APIs::VendorShipmentsV1, Peddler::APIs::VendorTransactionStatusV1
Defined Under Namespace
Classes: CannotSandbox, MustSandbox
Class Attribute Summary collapse
Instance Attribute Summary collapse
- #access_token ⇒ String readonly
- #endpoint ⇒ Peddler::Endpoint readonly
- #parser ⇒ #call
-
#retries ⇒ Integer
readonly
Number of retries if throttled (default: 0).
Instance Method Summary collapse
- #endpoint_uri ⇒ URI::HTTPS
- #http ⇒ HTTP::Client
-
#initialize(aws_region, access_token, retries: 0) ⇒ API
constructor
A new instance of API.
-
#meter(requests_per_second) ⇒ self
Throttles with a rate limit and retries when the API returns a 429.
-
#retriable(**options) ⇒ self
Retries requests if they fail due to socket or
5xx
errors. -
#sandbox ⇒ self
Switches to the SP-API sandbox to make test calls.
- #sandbox? ⇒ Boolean
-
#use(*features) ⇒ self
Turn on HTTP features.
-
#via(*proxy) ⇒ self
(also: #through)
Make a request through an HTTP proxy.
Constructor Details
#initialize(aws_region, access_token, retries: 0) ⇒ API
Returns a new instance of API.
36 37 38 39 40 41 |
# File 'lib/peddler/api.rb', line 36 def initialize(aws_region, access_token, retries: 0) @endpoint = Endpoint.find(aws_region) @access_token = access_token @retries = retries @sandbox = false end |
Class Attribute Details
.parser ⇒ #call
19 20 21 |
# File 'lib/peddler/api.rb', line 19 def parser @parser end |
Instance Attribute Details
#access_token ⇒ String (readonly)
26 27 28 |
# File 'lib/peddler/api.rb', line 26 def access_token @access_token end |
#endpoint ⇒ Peddler::Endpoint (readonly)
23 24 25 |
# File 'lib/peddler/api.rb', line 23 def endpoint @endpoint end |
#parser ⇒ #call
140 141 142 |
# File 'lib/peddler/api.rb', line 140 def parser @parser || self.class.parser end |
#retries ⇒ Integer (readonly)
Number of retries if throttled (default: 0)
31 32 33 |
# File 'lib/peddler/api.rb', line 31 def retries @retries end |
Instance Method Details
#endpoint_uri ⇒ URI::HTTPS
44 45 46 |
# File 'lib/peddler/api.rb', line 44 def endpoint_uri sandbox? ? endpoint.sandbox : endpoint.production end |
#http ⇒ HTTP::Client
65 66 67 68 69 70 71 72 |
# File 'lib/peddler/api.rb', line 65 def http @http ||= HTTP.headers( "Host" => endpoint_uri.host, "User-Agent" => user_agent, "X-Amz-Access-Token" => access_token, "X-Amz-Date" => , ) end |
#meter(requests_per_second) ⇒ self
Throttles with a rate limit and retries when the API returns a 429
78 79 80 81 82 83 84 85 86 87 |
# File 'lib/peddler/api.rb', line 78 def meter(requests_per_second) return self if retries.zero? # HTTP v6.0 will implement retriable. Until then, point to their GitHub repo, or it's a no-op. # https://github.com/httprb/http/pull/790 delay = sandbox? ? 0.2 : 1.0 / requests_per_second retriable(delay:, tries: retries + 1, retry_statuses: [429]) self end |
#retriable(**options) ⇒ self
Retries requests if they fail due to socket or 5xx
errors
107 108 109 110 111 112 |
# File 'lib/peddler/api.rb', line 107 [:via, :use, :retriable].each do |method| define_method(method) do |*args, **kwargs, &block| @http = http.send(method, *args, **kwargs, &block) if http.respond_to?(method) self end end |
#sandbox ⇒ self
Switches to the SP-API sandbox to make test calls
52 53 54 55 |
# File 'lib/peddler/api.rb', line 52 def sandbox @sandbox = true self end |
#sandbox? ⇒ Boolean
58 59 60 |
# File 'lib/peddler/api.rb', line 58 def sandbox? @sandbox end |
#use(*features) ⇒ self
Turn on HTTP features
107 108 109 110 111 112 |
# File 'lib/peddler/api.rb', line 107 [:via, :use, :retriable].each do |method| define_method(method) do |*args, **kwargs, &block| @http = http.send(method, *args, **kwargs, &block) if http.respond_to?(method) self end end |
#via(*proxy) ⇒ self Also known as: through
Make a request through an HTTP proxy
107 108 109 110 111 112 |
# File 'lib/peddler/api.rb', line 107 [:via, :use, :retriable].each do |method| define_method(method) do |*args, **kwargs, &block| @http = http.send(method, *args, **kwargs, &block) if http.respond_to?(method) self end end |