API Prynt to jeden punkt końcowy GraphQL na drukarnię. Ta strona opisuje, jak wysyłać do niego żądania i skąd wziąć schemat, z którego zbudujesz zapytania i typy w swoim kodzie.
Przykłady pokazują adres zastępczy. Wpisz adres swojej drukarni, żeby go podmienić.
Punkt końcowy
Dział zatytułowany „Punkt końcowy”POST https://twoja-drukarnia.prynt.pl/api/v1/graphqlAuthorization: Bearer prynt_…Content-Type: application/jsonTreść żądania to obiekt JSON:
{ "query": "query Example($id: ID!) { … }", "variables": { "id": "…" }, "operationName": "Example"}queryjest wymagane,variablesioperationNameopcjonalne.- Wysyłaj żądania metodą
POST. Zapytania przezGETi wiele operacji w jednej tablicy JSON (batching) nie należą do publicznego API. - Jedno żądanie to jedna operacja: zapytanie (
query) albo mutacja (mutation). Operacja może wybrać kilka pól głównych naraz. - Subskrypcje (
subscription) nie są dostępne dla kluczy API. Zmiany na żywo pobieraj sondą zmian w backendzie integracji, zobacz przepis Zmiany na żywo w ekranach integracji.
Odpowiedź
Dział zatytułowany „Odpowiedź”Odpowiedź ma kształt standardowy dla GraphQL:
{ "data": { "…": "…" }, "errors": [{ "message": "…", "path": ["…"], "extensions": { "code": "…", "requestId": "…" } }]}datazawiera wyniki pól, które się udały. Gdy część pól zawiedzie, dostaniesz jednocześniedataierrors, apathbłędu wskaże pole.- Sprawdzaj
errorsw każdej odpowiedzi, także ze statusem HTTP 200. Kody błędów i zalecane reakcje opisuje strona Błędy API. - Żądanie odrzucone, zanim operacja się wykona, ma własny status HTTP 4xx albo 5xx (400, 401,
403, 409, 429, 500 albo 503) i same
errors, bezdata. Status 200 oznacza, że API zaczęło wykonywać operację: sprawdźerrors, bo mogło się nie udać część pól albo każde z nich. - Odpowiedź ze statusem HTTP 5xx może nie mieć kształtu GraphQL, np. gdy Prynt jest chwilowo niedostępny. Traktuj każdą taką odpowiedź jak błąd przejściowy i ponów żądanie później.
- Nagłówek
X-Request-IDi poleextensions.requestIdw błędach identyfikują żądanie. Zapisuj je w logach. - Treść żądania, która nie jest poprawnym JSON-em, dostaje status HTTP 400 z krótkim komunikatem
spoza formatu GraphQL (bez
errors). Sprawdź, jak Twój kod serializuje treść.
Schemat do pobrania
Dział zatytułowany „Schemat do pobrania”Introspekcja (__schema, __type) jest wyłączona dla kluczy API: takie zapytanie kończy się błędem
API_QUERY_INVALID. Pełny publiczny schemat w formacie SDL publikujemy razem z dokumentacją, przy
każdym wydaniu Prynt:
Pobierz schemat (SDL)
Schemat zawiera wszystkie publiczne operacje i pola. Twój klucz może z niego wybrać tylko część
objętą zakresami integracji: na przykład bez prices:read zapytanie o pola cen i kosztów API
odrzuci błędem API_SCOPE_MISSING, z brakującym zakresem w params.scope i polem, argumentem albo
filtrem, który go wymaga, w params.coordinate. Zmiany schematu opisuje
historia zmian API.
Narzędzia
Dział zatytułowany „Narzędzia”Generator typów sprawdzi Twoje zapytania ze schematem jeszcze przed uruchomieniem integracji.
GraphQL Code Generator z pluginem typed-document-node
generuje typy zapytań i wyników:
import type { CodegenConfig } from '@graphql-codegen/cli';
const config: CodegenConfig = { schema: 'schema/prynt.graphql', documents: ['src/**/*.graphql'], generates: { 'src/generated/prynt.ts': { plugins: ['typescript', 'typescript-operations', 'typed-document-node'], }, },};
export default config;ariadne-codegen generuje klienta z typowanymi modelami na podstawie pliku SDL i Twoich zapytań:
[tool.ariadne-codegen]schema_path = "schema/prynt.graphql"queries_path = "queries/"target_package_name = "prynt_client"-
Edytor. Rozszerzenie GraphQL do VS Code i edytory JetBrains podpowiadają pola i sprawdzają zapytania na podstawie pliku
graphql.config.yml:schema: schema/prynt.graphqldocuments: src/**/*.graphql -
Ręczne testy. Do wysyłania pojedynczych żądań użyj
curlalbo aplikacji desktopowej (Insomnia, Postman) z zaimportowanym plikiem SDL. Narzędzia działające w przeglądarce, np. GraphiQL czy Apollo Sandbox, wysyłają nagłówekOrigin, więc API odrzuci ich żądania z kluczem (ORIGIN_NOT_ALLOWED, a na stronie PryntAPI_TOKEN_BROWSER_USE).
Dobre praktyki
Dział zatytułowany „Dobre praktyki”- Nazywaj operacje, np.
query OrdersForSync. Łatwiej je potem znaleźć w logach. - Przekazuj wartości przez
variables, nie wklejaj ich do tekstu zapytania. Unikniesz błędów cytowania i wstrzyknięcia. - Wybieraj tylko potrzebne pola. Mniejsze zapytanie jest szybsze i mieści się w limicie złożoności.
- Obsłuż nieznane wartości enumów. Nowa wartość może dojść w kolejnym wydaniu; zobacz Wersjonowanie.