Instalación
Inicio rápido
Crea un artículo y luego lista las existencias disponibles:Autenticación
Pasa una clave de API o un token de acceso OAuth conWithToken. Crea una clave de API en la app, en Configuración > Acceso > Claves de API. La clave actúa como el miembro que la creó, y cada llamada necesita tanto el permiso del miembro como uno de los alcances de la clave.
Para un token OAuth que vence, pasa una función con WithTokenFunc. El cliente la llama antes de cada solicitud, y el error que devuelva es el error de la llamada:
Un
Client se puede usar con seguridad desde muchas goroutines. Crea uno y compártelo.
Hacer llamadas
Cada área de la API es un campo del cliente, comoCatalog o Inventory, con un método por cada operación. Todos los métodos reciben primero un context.Context, luego los parámetros de ruta, luego el cuerpo y luego los parámetros de consulta:
GET /catalog/items/{item}. Un método devuelve el data de la respuesta como un tipo generado. Una respuesta vacía devuelve solo un error, una exportación CSV sus bytes y un archivo el *http.Response, cuyo cuerpo debes cerrar.
Cancela el contexto para detener una llamada, incluidos los reintentos y las esperas.
Campos opcionales
Un parámetro de consulta que puedes omitir es un puntero.stockshift.Ptr crea uno a partir de un valor.
Un campo del cuerpo de la solicitud que puedes omitir es un Opt. Su valor cero omite el campo, stockshift.Value(v) envía v y stockshift.Null[T]() envía null, que vacía el campo donde la API lo permite:
Otros endpoints
client.Do llama a cualquier ruta y decodifica la respuesta JSON en un valor que le pasas. Úsalo para un endpoint que se agregó a la API después de esta versión del paquete:
Paginación
Una lista que puede crecer devuelve una página a la vez. Cada lista paginada tiene un segundo método que termina enAll y devuelve un iter.Seq2. Sigue los cursores y entrega cada registro:
break lo detiene. Un error termina el ciclo. Para paginar a mano, asigna a After el NextCursor de cada página hasta que sea nil.
Errores
Una llamada que la API rechaza devuelve un*APIError que contiene el cuerpo de detalles del problema de RFC 9457. Decide según Code, que es estable. Problem.Detail está escrito para personas y puede cambiar.
APIError también tiene StatusCode y Header. Una llamada que no recibe respuesta, porque falló la red o el intento agotó el tiempo de espera, devuelve un *ConnectionError que envuelve la causa. Cuando el contexto termina, la llamada devuelve el error del contexto.
Reintentos y claves de idempotencia
El cliente reintenta un429 después del tiempo que indica Retry-After. Lo hace con todos los métodos, porque la API no ejecutó la llamada. Si Retry-After es mayor que WithMaxRetryAfter, devuelve el error en lugar de esperar.
Un 5xx o una falla de red se reintenta para GET, PUT y DELETE, con una breve espera entre intentos. Un POST o PATCH solo se reintenta cuando le das una clave de idempotencia, para que un reintento no pueda hacer el cambio dos veces:
CallMaxRetries y CallHeader cambian una sola llamada de la misma manera.
Webhooks
Revisa el encabezadoStockShift-Signature antes de confiar en una entrega. WebhookVerifier.Verify necesita el cuerpo sin procesar, exactamente como llegó:
Tolerance para cambiarlo. Los reintentos de un evento conservan su ID, así que guárdalo y omite los eventos que ya procesaste.
Cada tipo de evento tiene una constante, como EventInventoryStockAdjusted, cuyo comentario de documentación indica el tipo en el que se decodifica su Data. Para probar tu propio receptor, SignWebhook firma un payload igual que StockShift.
Versiones
El módulo sigue el versionado semántico. La versión mayor cambia cuando la API cambia de una forma que puede romper tu código, como un campo eliminado o un parámetro obligatorio nuevo. En Go una versión mayor nueva también cambia la ruta de importación, comogithub.com/StockShift/go-sdk/v2. Los endpoints y campos nuevos llegan en versiones menores. APIVersion contiene la versión de la referencia de la API con la que se compiló el módulo.
Se admiten las dos versiones más recientes de Go, igual que hace el equipo de Go.