Paginierung
Wie eine Liste durchlaufen wird, was jeder Tarif davon lesen darf und jede Operation, die paginiert. Gelesen aus der OpenAPI-Spezifikation und den Limits der API selbst, sodass die Zahlen hier die sind, die die API durchsetzt.
- 30Operationen mit page + per_page
- 6Begrenzte Listen mit limit
- 100Max. per_page
- 10,000Höchste Seitenzahl
Zwei Parameter
Jede Liste nimmt dieselben zwei Query-Parameter, einmal in der Spezifikation deklariert und von jeder Operation geteilt. Alles außerhalb der Grenzen ist ein 400 mit INVALID_PARAMETER; ein unbekannter Parameter wird ignoriert, nicht abgelehnt.
pageintegerPage number, from 1 to 10,000
- Min
- 1
- Max
- 10,000
- Standard
- 1
per_pageintegerItems per page (max 100)
- Min
- 1
- Max
- 100
- Standard
- 20
per_page endet fast überall bei 100. Eine größere Obergrenze (1000) gilt für die Bulk-Listen: /v1/firearms/media.
6 Operationen sind Ranglisten statt Listen: sie nehmen ein einzelnes limit, liefern die obersten Zeilen und tragen kein pagination-Objekt: /v1/firearms/top, /v1/popular/firearms, /v1/stats/calibers/popular, /v1/stats/manufacturers/prolific, /v1/stats/feature-frequency, /v1/data/tasks.
Die Hülle
Eine paginierte Antwort verpackt die Seite jedes Mal im selben Objekt. Das Beispiel unten ist aus den Beispielen des Schemas gebaut und kann daher nicht von dem abweichen, was die API sendet.
{ "success": true, "data": [ /* one page of records */ ], "pagination": { "page": 1, "per_page": 20, "limit": 20, "total": 42, "totalPages": 3 }}pagination.pageintegererforderlichThe page this response is, 1-based.
pagination.per_pageintegererforderlichPage size. Same value as
limit.pagination.limitintegererforderlichPage size. Alias of
per_page.pagination.totalintegeroptionalTotal records matching the query across every page.
pagination.totalPagesintegeroptionalHow many pages the result set spans at the current
per_page.
Page-size is reported under both per_page (matching the request parameter) and limit (retained for existing integrations). They always carry the same value. total and totalPages are omitted for Explorer and anonymous callers.
Eine Liste durchlaufen
Die Schleife, die auf jedem Tarif funktioniert, steuert sich über die gerade empfangene Seite, nicht über totalPages. Vier Regeln und der Code in drei Sprachen.
- 1Aufhören, wenn eine Seite zu kurz zurückkommt. Weniger Zeilen als
per_pagebedeutet auf jedem Tarif: letzte Seite. - 2
totalundtotalPagesals optionale Extras behandeln. Bei Explorer- und anonymen Aufrufen fehlen sie, sodass eine Schleife mitpage < totalPagesdort nach einer Seite stoppt. - 3Die größte nutzbare Seite anfordern.
per_page=100bedeutet 100× weniger Anfragen gegen Minutenlimit und Tageskontingent und erreicht dieselben Zeilen. - 4Einmal durchlaufen, dann anders aktuell bleiben. Jede Seite trägt ein
ETagund antwortet mit 304, wenn unverändert, und Daten-Webhooks pushen Katalogänderungen, sodass ein Spiegel die Liste nie erneut durchläuft. Mehr als 10 aufeinanderfolgende Seiten innerhalb von 90 Sekunden werden abgelehnt.
cURL
# Page 1, then keep going while a page comes back fullcurl -H "X-API-Key: your_api_key" \ "https://api.gunspec.io/v1/firearms?category=rifle&per_page=100&page=1" curl -H "X-API-Key: your_api_key" \ "https://api.gunspec.io/v1/firearms?category=rifle&per_page=100&page=2"Was jeder Tarif lesen darf
Bei der Paginierung unterscheiden sich die Tarife am stärksten, und jede Regel unten wird von der API durchgesetzt, nicht per Konvention. Die Zahlen stammen aus derselben Konfiguration, die die Middleware liest.
Seitentiefe
Die tiefste Seitenzahl, die ein Tarif auf den Firearm-Listen anfordern darf. Darüber hinaus ist die Antwort ein 403; Liste mit Filtern eingrenzen oder upgraden.
- Explorer
- 5 Seiten
- Builder
- 25 Seiten
- Studio
- ∞
- Enterprise
- ∞
Gesamtzahlen
Ob die Hülle total und totalPages trägt. Im kostenlosen Tarif verborgen, damit die Größe des Katalogs nicht aus einer Liste abgelesen werden kann.
- Explorer
- —
- Builder
- ✓
- Studio
- ✓
- Enterprise
- ✓
Sequenzieller Seiten-Burst
10 oder mehr aufeinanderfolgende Seiten innerhalb von 90 Sekunden sind ein 429, pro Schlüssel oder Adresse.
Zielt auf Crawler. Wer eine UI durchblättert, erreicht es nie; ein Skript, das den Katalog will, sollte per_page an der Obergrenze, Filter oder Webhooks nutzen.
Harte Obergrenzen
page endet bei 10,000 und per_page bei 100, auf jedem Tarif, auch Enterprise.
Ein Wert über der Obergrenze ist ein 400, kein Zuschnitt: per_page=500 wird abgelehnt statt stillschweigend als 100 bedient.
Wie eine abgelehnte Seitenanfrage aussieht
The plan does not page this deep into a list. Narrow the list with filters, or upgrade for deeper paging.
Too many sequential pages in a short time. Slow the walk down, or use a larger
per_page.
Sortierung
Wo eine Liste sortiert werden kann, deklariert sie ein sort-Vokabular und eine order-Richtung; die Standardreihenfolge zeigt die Referenz je Operation. Jede andere Liste hat eine feste Reihenfolge, die die Beschreibung der Operation nennt.
nameweightyearcalibercreated_atfavorites
order: asc | desccreated_atupdated_atstatuspriority
order: asc | desc
Jede Operation, die paginiert
30 Operationen nehmen page und per_page und antworten mit der Hülle; 6 nehmen ein einzelnes limit. Jede Zeile verlinkt auf ihre Referenzseite.
| Zeile | Endpunkt | Stil | Standard | Max | Tarif |
|---|---|---|---|---|---|
| 01 | /v1/firearmsList firearms | page + per_page | 20 | 100 | Explorer |
| 02 | /v1/firearms/searchFull-text search | page + per_page | 20 | 100 | Builder |
| 03 | /v1/firearms/mediaIndex every firearm that has imagery | page + per_page | 250 | 1000 | Explorer |
| 04 | /v1/firearms/topRank firearms by a superlative | limit | 10 | 25 | Builder |
| 05 | /v1/firearms/by-featureFilter by feature | page + per_page | 20 | 100 | Builder |
| 06 | /v1/firearms/by-actionFilter by action type | page + per_page | 20 | 100 | Explorer |
| 07 | /v1/firearms/by-materialFilter by construction material | page + per_page | 20 | 100 | Builder |
| 08 | /v1/firearms/by-designerFilter by designer | page + per_page | 20 | 100 | Builder |
| 09 | /v1/firearms/by-conflictFilter by conflict | page + per_page | 20 | 100 | Studio |
| 10 | /v1/firearms/power-ratingRank by composite power rating | page + per_page | 20 | 100 | Builder |
| 11 | /v1/firearms/timelineBrowse the catalog chronologically | page + per_page | 50 | 100 | Builder |
| 12 | /v1/popular/firearmsList the most viewed firearms | limit | 10 | 20 | Explorer |
| 13 | /v1/manufacturersList manufacturers | page + per_page | 20 | 100 | Explorer |
| 14 | /v1/manufacturers/{id}/firearmsList a manufacturer firearms | page + per_page | 20 | 100 | Explorer |
| 15 | /v1/calibersList calibers | page + per_page | 20 | 100 | Explorer |
| 16 | /v1/calibers/{id}/firearmsList firearms in a caliber | page + per_page | 20 | 100 | Explorer |
| 17 | /v1/calibers/{id}/ammunitionList ammunition for a caliber | page + per_page | 20 | 100 | Builder |
| 18 | /v1/ammunitionList ammunition loads | page + per_page | 20 | 100 | Builder |
| 19 | /v1/categories/{slug}/firearmsList firearms in a category | page + per_page | 20 | 100 | Explorer |
| 20 | /v1/stats/calibers/popularRank calibers by adoption | limit | 20 | 100 | Explorer |
| 21 | /v1/stats/manufacturers/prolificRank manufacturers by output | limit | 20 | 100 | Explorer |
| 22 | /v1/stats/feature-frequencyRank features by frequency | limit | 50 | 100 | Builder |
| 23 | /v1/data/tasksList data remediation tasks | limit | 50 | 200 | Explorer |
| 24 | /v1/data/gaps/recordsList records missing a field | page + per_page | 20 | 100 | Enterprise |
| 25 | /v1/data/confidenceGet per-record confidence scores | page + per_page | 20 | 100 | Enterprise |
| 26 | /v1/me/favoritesList your favorites | page + per_page | 20 | 100 | Explorer |
| 27 | /v1/me/reportsList your data reports | page + per_page | 20 | 100 | Explorer |
| 28 | /v1/me/supportList your support tickets | page + per_page | 20 | 100 | Explorer |
| 29 | /v1/me/webhooksList your webhook endpoints | page + per_page | 20 | 100 | Explorer |
| 30 | /v1/game-stats/versions/{version}/firearmsList firearms in a snapshot | page + per_page | 20 | 100 | Builder |
| 31 | /v1/changelogList changelog entries | page + per_page | 20 | 100 | Explorer |
| 32 | /v1/blogList blog posts | page + per_page | 20 | 100 | Explorer |
| 33 | /v1/attachmentsList attachments | page + per_page | 20 | 100 | Explorer |
| 34 | /v1/attachments/{id}/firearmsList firearms an attachment fits | page + per_page | 20 | 100 | Studio |
| 35 | /v1/vendor/offersRead back your listings | page + per_page | 20 | 100 | Enterprise |
| 36 | /v1/interfaces/{id}/firearmsList firearms exposing a standard | page + per_page | 20 | 100 | Studio |
SDKs und Agenten
Die offiziellen SDKs bieten einen Auto-Paging-Iterator, der jede Regel dieser Seite anwendet: Seiten werden bei Bedarf geholt, bei einer kurzen Seite stoppt er und totalPages liest er nie.
for await (const firearm of client.firearms.listAutoPaging({ category: 'rifle' })) { console.log(firearm.name); // pages are fetched on demand}for firearm in client.firearms.list_auto_paging({"category": "rifle"}): print(firearm["name"]) # pages are fetched on demandSie geben das an einen Coding-Agenten? Die Agenten-Pakete und llms.txt enthalten dieselben Regeln in einer Form, auf die ein Modell reagieren kann: über das Kurzseiten-Signal blättern, per_page ausreizen und bei 403 oder 429 error.reason lesen, bevor erneut versucht wird.