API de plataforma digital: semántica de API
En esta página se explica la semántica de nuestra API REST. Incluye información sobre:
- Cómo preguntar a un servicio sobre sí mismo: qué campos admite, qué campos se pueden filtrar.
- Cómo obtener solo la información que desea mediante el filtrado y la ordenación.
- La "forma" de nuestras respuestas JSON en diferentes escenarios.
En este documento se supone que ha completado el proceso de incorporación de API.
Protocolo HTTP
Digital Platform API admite el protocolo HTTP versión 1.1 o posterior. Aunque algunas llamadas pueden funcionar con la versión 1.0 en desuso, esto no está garantizado. Asegúrese de que el cliente se comunica con al menos la versión 1.1.
Puntos de conexión de API
La dirección URL del punto de conexión de la API de producción es: https://api.appnexus.com
. Tenga en cuenta que el acceso no seguro a la API del producto (HTTP) no está disponible.
Los cambios realizados con esta API afectan al entorno de producción. Solo los usuarios autorizados deben modificar la información o la configuración de este entorno.
Semántica de REST
Nuestros servicios de API son RESTful. REST (transferencia de estado representacional) es un tipo de arquitectura de software en la que las solicitudes modela la comunicación desde un explorador web a un servidor web. A continuación se muestran los métodos REST centrales que se usan en nuestros servicios de API y sus usos:
POST | Crear |
---|---|
GET |
Lectura |
PUT |
Actualizar |
DELETE |
Eliminar |
Al realizar una POST
solicitud o PUT
, debe incluir un archivo JSON con los datos para crear o actualizar.
Advertencia
PUT
sobrescribe matrices a menos que 'append=true'
se agregue a la cadena de consulta.
En PUT
el caso de las solicitudes, solo se actualizarán los campos incluidos en el archivo JSON , excepto en el caso de las matrices. Al actualizar una matriz mediante PUT
, todos los campos de la matriz se sobrescriben con el contenido de la nueva matriz que cargue, a menos que anexe lo siguiente a la cadena de consulta de solicitud: "append=true"
.
Ejemplo de solicitud "heredada" PUT
para actualizar una matriz
Este ejemplo le guía por el proceso de actualizar correctamente la pixels
matriz de identificador creativo 503577 mediante el método "heredado"; es decir, con el comportamiento "sobrescribir matrices en PUT
" que se produce a menos que anexe la cadena "append=true"
a la cadena de consulta de la solicitud.
En primer lugar, echemos un vistazo a la creatividad. Tenga en cuenta que la pixels
matriz ya incluye un píxel.
$ curl -b cookies 'https://api.appnexus.com/creative?id=503577'
{
"response": {
"status": "OK",
"count": 1,
"id": "503577",
"start_element": 0,
"num_elements": 100,
"creative": {
"name": null,
"brand_id": 1,
"media_url": "https://creative.com/300x250",
"id": 503577,
...
"pixels": [
{
"id": 196,
"pixel_template_id": null,
"param_1": null,
"param_2": null,
"param_3": null,
"param_4": null,
"param_5": null,
"format": "url-js",
"url": "https://50.16.221.228/render_js?cb=${CACHEBUSTER}&uid=${USER_ID}"
}
],
...
}
}
}
A continuación, creamos el archivo JSON para agregar un nuevo píxel a la creatividad. En el archivo, se incluyen tanto el nuevo píxel que queremos agregar como el píxel que ya estaba asociado a la creatividad.
Si no se incluye el píxel existente en el archivo JSON , nuestra actualización eliminará ese píxel de la creatividad.
$ cat creative_update
{
"creative": {
"pixels": [
{
"format": "url-js",
"url":"https://12.19.232.312/render_js?cb=${CACHEBUSTER}&uid=${USER_ID}&ref=${REFERER_URL}"
},
{
"id": 196,
"format": "url-js",
"url": "https://50.18.232.228/render_js?cb=${CACHEBUSTER}&uid=${USER_ID}"
}
]
}
}
A continuación, se realiza una PUT
llamada para actualizar la creatividad con la información del archivo JSON . Tenga en cuenta que la pixels
matriz de la respuesta incluye los píxeles nuevos y antiguos.
$ curl -b cookies -X PUT -d @creative_update 'https://api.appnexus.com/creative?id=503577'
{
"response": {
"status": "OK",
"count": 1,
"id": "503577",
"start_element": 0,
"num_elements": 100,
"creative": {
"name": null,
"brand_id": 1,
"media_url": "https://creative.com/300x250",
"id": 503577,
...
"pixels": [
{
"id": 196,
"pixel_template_id": null,
"param_1": null,
"param_2": null,
"param_3": null,
"param_4": null,
"param_5": null,
"format": "url-js",
"url": "https://50.16.221.228/render_js?cb=${CACHEBUSTER}&uid=${USER_ID}
&ref=${REFERER_URL}&campaign_id=147"
},
{
"id": 197,
"pixel_template_id": null,
"param_1": null,
"param_2": null,
"param_3": null,
"param_4": null,
"param_5": null,
"format": "url-js",
"url":"https://12.13.234.312/render_js?cb=${CACHEBUSTER}&uid=${USER_ID}&ref=${REFERER_URL}"
}
],
...
}
}
}
Uso de cURL
En nuestra documentación usamos curl para realizar solicitudes HTTP. Curl es una herramienta de línea de comandos para transferir archivos con sintaxis url, compatible con FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, etc. Se han proporcionado scripts de ejemplo en cada página wiki de API para ilustrar la estructura de los curl
comandos que necesitará para ejecutar los servicios de LA API de Xandr. Además, a continuación se muestra un ejemplo de cómo realizar una solicitud genérica POST
. En este ejemplo se usa el servicio de autenticación:
$ curl -b cookies -c cookies -X POST -d @auth.json 'https://api.appnexus.com/auth'
Fragmento de solicitud | Lo que significa |
---|---|
-c cookies |
Crea un archivo de texto llamado "cookies" y almacena el token de sesión (asignado por el servicio de autenticación). Este no es un argumento necesario para curl después de la autenticación inicial, pero no afecta a las llamadas posteriores si se incluye. |
-b cookies |
Recupera el token de autenticación que almacenó anteriormente en el archivo de "cookies" texto. |
-X |
Indica que va a realizar un determinado tipo de solicitud, en este caso "POST" . |
-d |
Indica que va a cargar un archivo, en este caso "auth.json" . |
'https://api.appnexus.com/auth' |
Dirección URL del servicio al que realiza la solicitud. Use comillas en caso de que tenga caracteres especiales en la dirección URL. |
Sugerencia
Use comillas simples alrededor de la dirección URL de la solicitud.
Algunas solicitudes requieren comillas simples alrededor de la dirección URL de la solicitud, como en la solicitud anterior curl
. Si recibe un mensaje de error del shell de UNIX, asegúrese de que la dirección URL de la solicitud tenga comillas simples antes de seguir solucionando problemas. Para obtener más información sobre cómo funcionan las comillas de shell de UNIX y el escape, consulte esta documentación sobre las comillas y el escape en los shells.
Filtrado y ordenación
La mayoría de los servicios de API admiten el filtrado y la ordenación. El filtrado permite especificar un subconjunto de objetos que se van a devolver. La ordenación permite controlar el orden de los objetos devueltos.
Sugerencia
Consulte también el servicio de búsqueda y el servicio de búsqueda para ver formas de buscar objetos en el miembro.
Nota:
Al filtrar por campos, el filtro "puede" solo respetarse si los campos usados para el filtrado se pasan en el parámetro de cadena de consulta fields.
Obtención de varios objetos por identificador
Puede obtener varios objetos específicos por identificador pasando una lista separada por comas de identificadores. El objeto de resultado contendrá una matriz que contiene solo esos objetos específicos. En el ejemplo siguiente, pedimos al Servicio de campañas solo las campañas con los identificadores 1, 2 y 3.
$ curl -bc -cc 'https://api.appnexus.com/campaign?id=1,2,3
{
"response" : {
"count" : 3,
"status" : "OK",
"campaigns" : [ ... ]
}
}
Filtrar por identificadores
Pase un parámetro de cadena de consulta para el campo con una lista separada por comas de identificadores.
Ejemplos
Solicitar todas las campañas para determinados artículos de línea
$ curl -b cookies 'https://api.appnexus.com/campaign?advertiser_id=40&line_item_id=1,2,3'
Solicitar determinados anunciantes
$ curl -b cookies 'https://api.appnexus.com/advertiser?id=3'
Sugerencia
Solo se devolverán 100 objetos por solicitud.
El número máximo de objetos que se pueden devolver, independientemente de la paginación, es 100. Si solicita más de 100 objetos, solo devolveremos los primeros 100 y no proporcionaremos un mensaje de error. Para obtener más información sobre cómo paginar los resultados de la API, consulte Paginación.
Filtrar por valores mínimos y máximos
Los campos que son del tipo int
, double
, date
o money
se pueden filtrar por min
y max
. Por ejemplo:
$ curl -b cookies 'https://api.appnexus.com/campaign?min_id=47'
$ curl -b cookies 'https://api.appnexus.com/campaign?min_advertiser_id=20'
Los campos del tipo date
también se pueden filtrar por nmin
y nmax
. El nmin
filtro le permite encontrar fechas que son null
o posteriores a la fecha especificada, y el nmax
filtro le permite encontrar fechas que son null
o antes de la fecha especificada. Por ejemplo:
$ curl -b cookies 'https://api.appnexus.com/campaign?nmax_start_date=2012-12-20+00:00:00'
$ curl -b cookies 'https://api.appnexus.com/campaign?nmin_end_date=2013-01-01+00:00:00'
Tenga en cuenta la sintaxis de fecha y hora necesaria en el ejemplo anterior: AAAA-MM-DD+HH:MM:SS
Otra opción para filtrar por fecha es usar el min_last_modified
filtro:
$ curl -b cookies 'https://api.appnexus.com/campaign?min_last_modified=2017-10-27+21:00:00'
Filtrar por nombres de campo
Para limitar la respuesta a campos específicos de un objeto, pase el fields
parámetro de cadena de consulta con una lista separada por comas de nombres de campo. Por ejemplo:
$ curl -b cookies "https://api.appnexus.com/user?current&fields=username,user_type,id"
{
"response":{
"status":"OK",
"count":1,
"start_element":0,
"num_elements":100,
"user":{
"id":14311,
"username":"rloveland",
"user_type":"admin"
}
}
}
Filtros varios en el campo
Se admiten los siguientes filtros adicionales basados en campos en las respuestas de API:
not_*
like_*
min_*
max_*
nmin_*
nmax_*
having_*
having_min_*
having_max_*
Ejemplo
$ curl -b cookies 'https://api.appnexus.com/placement?like_[fieldName]=partialValue'
Búsqueda
Algunos servicios admiten search
como parámetro de cadena de consulta para buscar el identificador o el nombre. Por ejemplo:
$ curl -b cookies 'https://api.appnexus.com/placement?search=17'
Ordenación
Para ordenar, use el sort
parámetro de cadena de consulta y pase una lista de campos por los que desea ordenar y si desea que sean ascendentes (asc
) o descendentes (desc
). Por ejemplo:
$ curl -b cookies 'https://api.appnexus.com/campaign?advertiser_id=1&sort=id.desc'
Paginación
Para paginar, use los start_element
parámetros y num_elements
. Si num_elements
no se proporciona, el valor predeterminado es 100 (que también es el valor máximo).
$ curl -b cookies 'https://api.appnexus.com/campaign?start_element=20&num_elements=10'
Anexar en PUT
Al incluir append=true
en la cadena de consulta de una PUT
llamada, un usuario solo puede actualizar un objeto secundario determinado en lugar de reemplazar todos los objetos secundarios. En otras palabras, en lugar de sobrescribir una matriz completa con una nueva en una PUT
llamada, puede usar append=true
en la cadena de consulta para agregar un único elemento a una matriz larga.
En este ejemplo, usaremos append=true
en una PUT
llamada para alternar la is_available
marca de un objeto en la member_availabilities
matriz del servicio de complementos. Sin la append=true
marca de la cadena de consulta, el nuevo elemento reemplazaría toda la matriz. En este ejemplo, solo se agrega.
En primer lugar, echemos un vistazo al objeto que vamos a modificar (en estos ejemplos se usa jq para segmentar y cortar el JSON). Ambas disponibilidades se establecen en true
:
Enviaremos el siguiente JSON para desactivar la is_available
marca en uno de los member_availability
objetos:
$ cat plugin-update.json
{
"plugin" : {
"developer" : {
"id" : 1
},
"member_availabilities" : [
{
"is_available" : false,
"id" : 4
}
],
"name" : "ccc"
}
}
Normalmente, el envío del JSON anterior en una PUT
llamada sobrescribiría toda member_availabilities
la matriz. Sin embargo, esta vez agregaremos "append=true"
a la cadena de consulta de la llamada. Esto indica a la API que cambie solo el objeto cuyo id
es 4
. Podemos comprobar que lo ha hecho inspeccionando la salida.
$ curl -bc -X PUT -d @plugin-update.json 'https://api.appnexus.com/plugin?id=13&append=true' | jq '.response.plugin.member_availabilities'
[
{
"is_available": false,
"id": 4
},
{
"is_available": true,
"id": 7
}
]
Estructura básica json
A continuación se muestra la sintaxis de los componentes de un objeto JSON y lo que significan.
Un objeto:
{. . . }
Matriz:
[. . . ]
Cadena:
". . ."
Asocie una clave a un valor de cadena alfanumérico:
"key":"string"
Asocie una clave con un valor numérico:
"key":int
Un ejemplo que los reúne:
{
"campaign": {
"name": "my campaign",
"id": 1434,
"creatives": [
{
"id": 4162,
"state": "active"
}
],
}
}
Tipos de campo JSON
POST
y PUT
las solicitudes requieren datos JSON . En PUT
el caso de las solicitudes, solo se actualizarán los campos JSON incluidos en una solicitud. Todos los demás campos no se modificarán.
Los campos diferentes requieren diferentes tipos de valores. La tabla de tipos siguiente amplía los definidos en el estándar JSON.
Tipo | Description | Ejemplo |
---|---|---|
booleano | True o false. | true |
string(100) | Cadena de 100 caracteres o menos. | "Homepage Pixel" |
Entero | El parámetro SyncSchedule especifica ???. Los valores válidos para este parámetro son: | 87 |
decimal | Número decimal genérico. | 3.0 |
float | Número de punto flotante con precisión de 32 bits. | 3.14 ... |
double | Número de punto flotante con precisión de 64 bits. | 3.14 ... |
enumeración | Uno de varios valores predeterminados. | "male" o "female" |
Dinero | Valor numérico de punto flotante que se usa para representar dinero. | 19.23 |
Timestamp | Cadena de fecha y hora con el formato AAAA-MM-DD HH:MM:SS. Todas las zonas horarias están en UTC a menos que se indique lo contrario. | "2009-01-14 05:41:04" |
date | Consulte la marca de tiempo anterior. | |
object | Contenedor de cualquier subcampo en el campo actual. En el ejemplo siguiente, el campo "brand" es un objeto múltiple. |
Vea el ejemplo del tipo de objeto siguiente. |
matriz | Lista que contiene uno o varios valores. En nuestra API, las matrices suelen contener listas de objetos, enteros o cadenas. | Vea el ejemplo para el tipo de matriz siguiente. |
Ejemplo de tipo de objeto
"brand": {
"id": 466,
"name": "PKR"
}
Ejemplo de tipo de matriz
"members" : [
{
"id": 1234,
"member_use_deal_floor": true,
"member_ask_price": 2.15,
"name": "Buyer 1"
},
{
"id": 5561,
"member_use_deal_floor": true,
"member_ask_price": 2.25,
"name": "Buyer 2"
}
]
¿Cómo y por qué las API de informes son diferentes?
Las API de informes disponibles a través del servicio de informes funcionan de forma diferente a nuestras otras API. Tienen su propio flujo de solicitud y respuesta de varios pasos. Esto es necesario porque procesan grandes cantidades de datos; Este procesamiento debe realizarse de forma asincrónica.
Para obtener instrucciones sobre cómo recuperar informes, consulte el servicio de informes.
Para obtener un tutorial en el que se explica cómo usar las API de informes de forma eficaz, consulte Paginación de informes.
Nota sobre guiones bajos y guiones
Los campos y valores JSON usan caracteres de subrayado, por ejemplo, audit_type_direct
.
Los nombres de servicio de API en las direcciones URL se dividen en guiones, por ejemplo, https://api.``appnexus``.com/insertion-order
.
Códigos de respuesta
Todos los servicios de API devuelven datos JSON . Cuando las llamadas de servicio se realizan correctamente, la respuesta JSON incluirá un "status"
campo establecido en "OK"
. La respuesta a POST
y PUT
las llamadas también incluirá el identificador del objeto pertinente, así como los atributos pertinentes de ese objeto. Cada respuesta incluye un "dbg_info"
objeto que transmite información sobre la llamada api y la respuesta que es solo para uso interno de Xandr y que se puede solicitar durante una consulta de soporte técnico.
Mensajes de error
Cuando se envía una entrada no válida a la API (por ejemplo, una contraseña incorrecta), se devolverá una respuesta JSON con "error"
campos y "error_id"
.
$ cat auth
{
"auth": {
"username":"user1",
"password":"Wr0ngP@ss"
}
}
$ curl -b cookies -c cookies -X POST -d @auth 'https://api.appnexus.com/auth'
{
"response": {
"error_id": "NOAUTH"
"error": "No match found for user\/pass",
"dbg_info": {
...
}
}
}
El "error"
campo es útil para fines de depuración, ya que contiene una descripción detallada del error. El "error_id"
campo se puede usar mediante programación como se describe en la tabla siguiente.
Error_ID | Significado | Cómo responder |
---|---|---|
INTEGRITY |
Una solicitud de cliente es incoherente; por ejemplo, una solicitud intenta eliminar una creatividad predeterminada adjunta a una ubicación activa. | Compruebe la coherencia de la lógica de solicitud. |
LIMIT |
El usuario ha alcanzado el número máximo de objetos permitidos de un tipo determinado. | Elimine objetos innecesarios para obtener por debajo del límite. Si no puede eliminar ningún objeto, póngase en contacto con su representante de Xandr. |
NOAUTH |
El usuario no ha iniciado sesión o las credenciales de inicio de sesión no son válidas. | Use el servicio de autenticación para obtener un token o compruebe el nombre de usuario y la contraseña en la solicitud. |
NOAUTH_DISABLED |
Se ha desactivado la cuenta del usuario. | Inicie sesión con otro usuario o cree una cuenta de usuario específicamente para el acceso a la API. |
NOAUTH_EXPIRED |
La contraseña del usuario ha expirado y debe restablecerse. | Use el servicio de autenticación para obtener un nuevo token. |
SYNTAX |
La sintaxis de la solicitud es incorrecta. | Use el "error" mensaje para identificar el problema y corregir el código. |
SYSTEM |
Se ha producido un error del sistema. | Póngase en contacto con su representante de Xandr. |
UNAUTH |
El usuario no está autorizado para realizar la acción solicitada. | Compruebe el "error" mensaje y asegúrese de que la lógica del código es correcta. |