Encontrar una operación
El esquema es la referencia autorizada para el subconjunto GraphQL compatible: raíces de operación, nombres, argumentos, tipos de entrada y valores de enum. Las descripciones ofrecen orientación de uso, y el GraphQL Explorer muestra ambos. Para las capacidades exclusivas de REST, usa la referencia de la API REST. Los nombres de las operaciones siguen los endpoints REST a los que llegan, en camelCase.GET /history es postHistory, GET /analytics/social es socialAnalytics, POST /post es createPost.
Las queries leen, las mutations escriben
Las queries son lecturas y validaciones que no cambian nada en nuestro lado. Las mutations publican o cambian el estado, inician trabajos o envían emails. Ni el verbo HTTP de REST ni el coste de una llamada deciden la raíz:validatePostcomprueba una publicación sin publicarla.validateMediacomprueba que una URL de medios sea accesible.generatePostes una query porque no cambia nada en nuestro lado. Aun así cuenta como una llamada a la API y devuelve un texto distinto cada vez, así que asegúrate de que una caché del cliente o una recarga automática no la repita sin que te des cuenta.mediaUploadUrles una mutation porque crea una URL de subida para tu cuenta.linkAnalyticses una mutation porque puede solicitar un informe por email.userBatches una mutation porque inicia un trabajo de exportación.
Crear una publicación
createPost recibe un único argumento input, así que toda la publicación es un solo objeto:
Tipos de argumentos
La mayoría de los argumentos son cadenas, números y booleanos corrientes. Hay tres casos que conviene conocer.Enums
Muchos argumentos de tipo cadena con un conjunto cerrado de valores compatibles son enums de GraphQL, que se escriben sin comillas y en mayúsculas:"instagram". El servidor asigna cada enum aceptado al valor exacto que espera el controlador REST subyacente: a menudo, aunque no siempre, una cadena en minúsculas. Un enum no válido se rechaza durante la validación de GraphQL antes de que se ejecute la operación, así que un error tipográfico no te cuesta nada.
Algunos argumentos comparten nombre entre operaciones pero aceptan valores diferentes, porque los endpoints realmente son distintos. reviews(platform:) acepta solo GMB y FACEBOOK, ya que son las únicas redes con reseñas. El autocompletado de tu cliente mostrará el conjunto correcto para cada operación.
El escalar JSON
Algunos argumentos están tipados comoJSON en lugar de un tipo específico. Esto ocurre cuando un valor tiene legítimamente más de una forma y ningún tipo GraphQL único podría describirlo con precisión:
explainError(code:)acepta215o“215”, porque los clientes guardan los códigos de error de ambas formas.createPost(input:)usa JSON para campos comopostymediaUrls, que pueden ser valores compartidos u objetos por plataforma.createAutomation(triggers:, actions:)reciben arrays cuyos campos dependen deltypede cada entrada.boostFacebookPost(interests:)acepta ids de intereses de Meta como cadenas o números.
JSON no es una laguna: el resolver lo valida antes de despacharlo, así que un valor no válido devuelve un error de validación y no consume ninguna llamada a la API.
Argumentos opcionales y nulls
En los argumentos opcionales y en los campos opcionales dentro de objetos de entrada, unnull explícito se normaliza como omisión. Los miembros null dentro de listas se conservan cuando el tipo de la lista lo permite.
Leer las respuestas
La mayoría de las operaciones devuelven un escalarJSON que contiene el envoltorio completo de la respuesta REST, así que selecciona el campo raíz sin subcampos. createPost devuelve actualmente un PostResult tipado, así que selecciona sus campos:
PostResult también incluyen raw: JSON!, que contiene la respuesta REST completa sin modificar:
raw es permanente y existe para que un campo nuevo que aparezca en la respuesta REST nunca quede inaccesible desde GraphQL mientras nos ponemos al día con su tipado. Si necesitas algo que los campos tipados no exponen, pide raw.
Subir medios
Los bytes de los medios no pueden viajar en una solicitud GraphQL. Una solicitud GraphQL es un único documento JSON con un límite de 64 KB, así que no hay ningún campo que acepte un archivo, y codificar una imagen en base64 dentro de la query superaría ese límite para cualquier cosa más grande que una miniatura. La vía compatible evita el problema por completo y, en cualquier caso, es más rápida que subir a través de una API, porque tus bytes van directamente al almacenamiento:-
Pide una URL de subida:
-
Lee
data.mediaUploadUrl.uploadUrl,accessUrlycontentTypedel JSON devuelto. -
Haz
PUTde tu archivo directamente auploadUrl, no a la API de Ayrshare, estableciendo el encabezadoContent-Typede la solicitud con elcontentTypedevuelto. -
Una vez que la subida se complete correctamente, pasa
accessUrlencreatePost.input.mediaUrls:
uploadUrl como una credencial de escritura de corta duración y no la registres ni la expongas. accessUrl es la URL de medios que se usa al crear la publicación.
También puedes seguir usando los endpoints REST de subida y hacer referencia a las URLs resultantes desde GraphQL. Ambas interfaces comparten la misma biblioteca de medios.
Lecturas recomendadas
- Errores: códigos de estado HTTP, estructura de los errores y éxito parcial.
- Límites y facturación: límites de tamaño de las consultas y cómo se cuentan las solicitudes.