Instalación
native-tls:
Inicio rápido
Crea un artículo y luego lista las existencias disponibles.try_next viene del crate futures-util.
Autenticación
Pasa una clave de API o un token de acceso OAuth aClient::new. 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 un Token::provider. El cliente lo llama antes de cada solicitud:
Client::builder acepta más ajustes:
Clonar un
Client es barato. Los clones comparten un solo grupo de conexiones.
Hacer llamadas
Cada área de la API tiene un método, comocatalog() o inventory(), con un método por cada operación. Los parámetros de ruta y el cuerpo son argumentos. Los parámetros de consulta opcionales son métodos de la llamada. Usa await en la llamada para enviarla:
GET /catalog/items/{item}.
Una llamada devuelve lo que contiene el data de la respuesta, así que get_item devuelve un ItemResource. Una respuesta vacía devuelve (), una exportación CSV un String y un archivo Bytes.
Cada esquema de la referencia de la API tiene un tipo en stockshift::types. Un tipo de solicitud se construye con new, que recibe sus campos obligatorios, y un setter para cada campo opcional:
Unknown, así que un valor que la API agregue después aún se decodifica.
Para una operación que esta versión del crate no tiene, usa Client::request con la ruta y cualquier tipo que implemente Deserialize.
Paginación
Una lista que puede crecer devuelve una página a la vez. Llama astream() en la llamada para obtener cada registro. Obtiene la página siguiente cuando se agotan los registros de la anterior:
next_cursor de cada página con after() hasta que sea None.
Errores
Cada llamada devuelveResult<T, stockshift::Error>. Cuando la API responde con un error, el error es Error::Api, que contiene el cuerpo de detalles del problema de RFC 9457. Decide según su código, que es estable. El detalle está escrito para personas y puede cambiar.
ApiError también tiene status, detail, problem y headers. Una llamada que no recibe respuesta, porque falló la red o el intento agotó el tiempo de espera, falla con Error::Connection.
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 max_retry_after, la llamada falla 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:
Webhooks
Revisa el encabezadoStockShift-Signature antes de confiar en una entrega. Webhook::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. Un evento que esta versión del crate no conoce llega como EventData::Unknown con sus datos como JSON.
Para probar tu propio receptor, Webhook::sign firma un payload igual que StockShift.
Versiones
La versión mayor cambia cuando un cambio en la API puede romper tu código, como un campo eliminado o un parámetro obligatorio nuevo. Los endpoints, campos y valores de enum nuevos llegan en versiones menores.stockshift::API_VERSION contiene la versión de la referencia de la API con la que se compiló el crate.
Una versión menor puede subir la versión mínima compatible de Rust.