Principios de las API públicas
La API pública de Ops Manager sigue los principios de arquitectura REST para exponer recursos internos que proporcionan acceso programático a las funcionalidades de Ops Manager.
La API tiene las siguientes funcionalidades:
- JSON entities
- Todas las entidades se expresan en JSON.
- Acceso basado en claves
- Cada usuario o aplicación de Ops Manager que necesite conectarse a Ops Manager debe generar una clave API antes de acceder a la API de Ops Manager.
- Autenticación digest
- Para garantizar que tu llave pública de API nunca se envíe a través de la red, las solicitudes API se autentican utilizando Autenticación Digest de HTTP.
- Interfaz navegable
- Usando un mecanismo de enlace coherente, puede explorar toda la API comenzando en el recurso raíz y siguiendo los enlaces a los recursos relacionados.
- Control de acceso de usuario
Las capacidades de API de cada usuario de Ops Manager coinciden con los permisos que le otorgan sus Roles de Ops Manager.
Ejemplo
Un usuario con el rol de
Project Read Onlyno puede modificar ningún recurso dentro de ese proyecto, ya sea a través de la Interfaz de Usuario del Ops Manager o de la API.- Lista de Acceso a la Red de la API
El API de Ops Manager puede asegurar el acceso a la API de Administración de Ops Manager a través de una Lista de Acceso de API. Esta lista restringe el acceso a la API a direcciones IP o CIDR específicas. Cada clave de API tiene su propia lista de acceso a la API de administración de Ops Manager. Cuando creas una nueva organización usando la interfaz de usuario de Ops Manager, MongoDB Atlas habilita por defecto el requisito de lista de acceso API.
Para aprender más, consulte (Opcional) Requerir una lista de acceso a API para su organización.
HTTP Methods
Todos los recursos admiten un subconjunto de estos métodos HTTP comunes:
Método | Propósito |
|---|---|
| Recupera la representación JSON de un recurso. |
| Crear un nuevo recurso usando la representación JSON proporcionada. |
| Reemplace un recurso con la representación JSON proporcionada. |
| Actualiza los campos especificados en un recurso usando la representación JSON proporcionada. |
| Remover un recurso. |
| Recupera el encabezado de respuesta sin la representación JSON del recurso. |
JSON
Todos los elementos están representados en JSON. Se aplican las siguientes reglas para las solicitudes y convenciones de respuesta:
Solicitud reglas
- Aplica el encabezado de tipo de contenido correcto
- Al enviar JSON al servidor a través de
POSToPUT, asegúrese de especificar el encabezado de solicitud de tipo de contenido correcto:Content-Type: application/json - Establecer fechas como cadenas ISO 8601
Al enviar fechas al servidor (como parámetros de consulta o campos en las entidades de solicitud
POSToPATCH), utilice fechas formateadas según el estándar ISO 8601. Si no especifica una zona horaria, Ops Manager asume UTC. Incluya un indicador de zona horaria para evitar ambigüedades.Ejemplo
El 27 de septiembre de 2018 se expresa como
2018-09-27.El 27 de septiembre de 2018 a las 4:00 PM EDT se expresa (con zona horaria) como
2018-09-27T16:00-04:00.
En algunos casos, una marca de tiempo se devuelve como una representación JSON de una marca de tiempo BSON, sobre todo en los recursos de copia de seguridad. Esta representación de una marca de tiempo BSON proporciona un documento JSON como un objeto con dos campos:
CampoDefinicióndateSegundos desde la Unix epoch
incrementUn número entero ordinal incremental de 32 bits para operaciones dentro de un segundo determinado.
Ejemplo
La tercera operación del 27 de septiembre de 2018 a las 4:00 PM EDT se expresa (con zona horaria) como
{ date: 2018-09-27T16:00-04:00, increment: 3 }
Convenciones de respuesta
- Rechazando campos inválidos
Los campos no válidos se rechazan en lugar de ser ignorados.
Ejemplo
Si intentas crear una nueva entidad y escribes mal uno de los campos, o si intentas actualizar una entidad existente e incluyes un campo que no se puede modificar, el Administrador de Operaciones responde con un código de estado HTTP 400 y un mensaje de error que indica qué campo no era válido.
- Devuelve las fechas como cadenas ISO.8601
- Todas las fechas se devuelven como cadenas con formato ISO 8601 designadas en UTC.
- Campo de etiquetas para desambiguar unidades
Los campos que contienen valores numéricos en una determinada unidad se nombran de modo que se pueda desambiguar la unidad que se utiliza.
Ejemplo
La disponibilidad de un host se devuelve en milisegundos, por lo que el nombre del campo de la entidad del host es
uptimeMsec.- Devuelve los valores por defecto para los campos sin otros valores
Los campos que no tienen un valor actual se devuelven con un valor por defecto apropiado.
Ejemplo
Ops Manager no tiene ninguna estadística para un host recién detectado, por lo que todos los campos relacionados con estadísticas tienen un valor de cero.
Se omiten los campos que no tienen un valor por defecto razonable en la entidad.
Ejemplo
Un host que no utiliza autenticación omite el campo
usernamede la entidad devuelta.- Devuelve los campos en orden alfabético
- Los campos en los documentos JSON que retorna la aplicación Ops Manager están en orden alfabético. El orden podría cambiar. No depender del orden de los campos.
Enlace
Cada recurso incluye uno o más enlaces a subrecursos y/o recursos relacionados.
Ejemplo
Un host tiene un vínculo al Proyecto al que pertenece, al set de réplicas al que pertenece, y así sucesivamente.
Los links se colocan en el campo links de una entidad, que es un arreglo de objetos de relación de link. Cada relación de enlace tiene dos campos:
Campo | Definición |
|---|---|
| Nombre (o tipo) de la relación. Muchos de estos se consideran como Tipos de Relaciones de Extensión y tienen el prefijo |
| Target URL. |
Todas las entidades incluyen al menos una relación de enlace llamada self, que es simplemente su propia URL. Cuando una entidad forma parte de una lista (es decir, al solicitar todos los hosts de un proyecto), solo incluye la relación de enlace self.
Ejemplo
Esta es una porción de un recurso de host con algunos enlaces:
1 { 2 "rel": "http://mms.mongodb.com/project", 3 "href": "https://cloud.mongodb.com/api/public/v1.0/projects/xxx" 4 "id": "xxx", 5 "projectId": "yyy", 6 "hostname": "mongodb.example.com", 7 "port": 27017, 8 "links": [ 9 { 10 "rel": "self", 11 "href": "https://<ops-manager-host>/api/public/v1.0/projects/xxx/hosts/yyy" 12 }, 13 { 14 "rel": "http://mms.mongodb.com/project", 15 "href": "https://<ops-manager-host>/api/public/v1.0/projects/xxx" 16 } 17 ] 18 }
Para obtener más información, consulte la especificación de enlace web.
Nota
Aunque la Especificación de Vinculación Web describe un formato para incluir enlaces en los encabezados de respuesta HTTP, no es obligatorio. Para hacer que la API sea fácilmente navegable, incluye los enlaces en el cuerpo de la respuesta en lugar de los encabezados de la respuesta.
Listas
Algunos recursos devuelven una lista de entidades.
Ejemplo
Puedes solicitar una lista de todos los hosts en un Proyecto.
Cuando se espera una lista de entidades en una respuesta, los resultados se devuelven en lotes delimitados por dos parámetros de query:
Campo | Definición |
|---|---|
| Número de página (a partir de 1). Por defecto, se establece en 1 si no se especifica. |
| Número de artículos para devolver por página, hasta un máximo de 500. Por defecto a 100 si no se especifica. |
La entidad de respuesta contiene tres campos:
Campo | Definición |
|---|---|
| Número total de items en el conjunto completo de resultados. Por ejemplo, si un proyecto tiene un total de 57 host, y realizas una solicitud con |
| Conjunto de resultados, que es un arreglo de documentos de entidades. |
| Contiene una a tres relaciones de enlace:
|
Si se solicita una lista de entidades y no se obtienen resultados, la API responde con un código de estado HTTP 200 y una matriz results vacía. En este caso,no responde con un código 404, ya que la lista de entidades podría no estar vacía en algún momento posterior.
Si hubieras solicitado una lista de entidades en un contexto que no existe (es decir, la lista de hosts para un proyecto inexistente), entonces esto resultaría en un estado de respuesta HTTP 404.
Ejemplo
Esta es una respuesta HTTP para la segunda página de 10 hosts en un proyecto con un total de 57 hosts:
1 { 2 3 "totalCount": 57, 4 "results": [ 5 { 6 "id": "yyy", 7 "projectId": "xxx", 8 // additional host properties... 9 }, 10 // additional host documents... 11 ], 12 "links": [ 13 { 14 "rel" : "self", 15 "href" : "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?pageNum=2&itemsPerPage=10" 16 }, 17 { 18 "rel": "previous", 19 "href": "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?itemsPerPage=10&pageNum=1" 20 }, 21 { 22 "rel": "next", 23 "href": "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?itemsPerPage=10&pageNum=3" 24 } 25 ] 26 }
Sobres
Es posible que algunos clientes no puedan acceder a los encabezados de respuesta HTTP ni al código de estado. En ese caso, puede solicitar que la respuesta incluya un envelope, que es simplemente una capa adicional de información en el documento JSON que contiene los detalles relevantes que normalmente se incluirían en los encabezados de respuesta.
Por defecto, la API no incluye la respuesta en un sobre. Para solicitarlo, simplemente agregue el parámetro de consulta envelope=true.
Para las respuestas que contienen una sola entidad, el sobre contiene dos campos:
Campo | Definición |
|---|---|
| HTTP status code. |
| Entidad solicitada. |
Para las respuestas que contiene una lista de entidades, ya existe una envoltura que envuelve los resultados, así que especificar envelope=true como un query en este caso sólo agrega el campo status al sobres actual.
Formateo legible
Por defecto, los espacios en blanco innecesarios se eliminan del JSON que devuelve Ops Manager. Para solicitar un JSON con formato legible, simplemente agregue el parámetro de consulta pretty=true a cualquier solicitud:
curl --user '{PUBLIC-KEY}:{PRIVATE-KEY}' --digest \ --header 'Accept: application/json' \ --include \ --request GET "{opsManagerHost}:{Port}/api/public/v1.0?pretty=true"
Nota
Todos los ejemplos en este documento muestran JSON en formato bastante legible para mayor claridad, aunque algunos URLde ejemplo pueden no contener este parámetro de query adicional.
Códigos de respuesta
Las respuestas utilizan los códigos de respuesta HTTP estándar, incluidos:
Código | Significado | notas |
|---|---|---|
200 | OK | La solicitud fue exitosa. Esta es la respuesta típica a una solicitud exitosa de |
201 | Creado. | Se ha creado un nuevo recurso. Esta es la respuesta típica a una solicitud exitosa de |
202 | Accepted | Se aceptó una solicitud para una operación asíncrona. |
400 | Solicitud incorrecta | Algo estaba mal con la solicitud del cliente. |
401 | No autorizado | Se requiere autenticación, pero no se encontraba presente en la solicitud. Normalmente, esto significa que la información de autenticación digerido se omitió de la solicitud, las credenciales proporcionadas son incorrectas o al usuario asociado con la clave API dada no se le permite acceder al recurso solicitado. |
403 | Forbidden | No se permite el acceso al recurso especificado. |
404 | No encontrado | El recurso solicitado no existe. |
405 | Método no permitido | El método HTTP no es compatible con el recurso especificado. Recuerde que cada recurso puede admitir únicamente un subconjunto de HTTP métodos. Por ejemplo, no tienes permitido |
409 | Conflicto | Esta suele ser la respuesta a una solicitud para crear o modificar una propiedad de una entidad que es única cuando ya existe una entidad existente con el mismo valor para esa propiedad. Por ejemplo, si intentas crear un proyecto con el mismo nombre que un proyecto existente, la solicitud falla. |
5xx | Diversos errores de servidor | Se produjo algo inesperado. Vuelve a intentarlo más tarde y considera notificar al soporte de Ops Manager. |
Errors
Cuando una solicitud da lugar a un error, el cuerpo de la respuesta contiene un documento JSON con información adicional sobre lo que salió mal. El documento contiene cinco campos:
Campo | Tipo de dato | Definición |
|---|---|---|
| string | Descripción legible por personas del error de solicitud de API. |
| entero | HTTP código de estado. |
| string | Constante nombrada que representa el error de solicitud de API como se muestra en Códigos de error de la API de administración de Ops Manager. |
| Arreglo de cadenas | Lista de parámetros que proporcionan más detalles sobre el error. |
| string |
Ejemplo
Ops Manager devuelve este cuerpo de respuesta para una solicitud con un formato incorrecto:
1 { 2 "detail" : "Cannot find resource /api/public/v1.0/softwareComponents/version.", 3 "error" : 404, 4 "errorCode" : "RESOURCE_NOT_FOUND", 5 "parameters" : [ "/api/public/v1.0/softwareComponents/version" ], 6 "reason" : "Not Found" 7 }
Para revisar la lista de códigos, consulte Códigos de Error de la API de Administración de Ops Manager.
Autenticación
Como se mencionó anteriormente, el Ops Manager API usa HTTP Digest autenticación. Los detalles de la autenticación por resumen están más allá del alcance de este documento, pero esencialmente requiere un nombre de usuario y una contraseña que son encriptada utilizando un valor único generado por el servidor llamado nonce. El nombre de usuario corresponde al nombre de usuario de una cuenta registrada en Ops Manager, y la contraseña es una llave pública de API asociada a esa cuenta.
Tenga en cuenta los siguientes puntos:
El nonce generado por el servidor es utilizado por el cliente para encriptar el nombre de usuario y la contraseña antes de enviarlos de regreso al servidor para autenticar una solicitud. El nonce solo es válido por una corta cantidad de tiempo según la especificación de autenticación por resumen. Esto se hace para evitar ataques de reproducción, por lo que no se puede almacenar en caché un nonce y utilizarlo indefinidamente.
Algunos métodos de recursos exigen mayor seguridad y están protegidos adicionalmente por listas de acceso que permiten el acceso al recurso solo desde las direcciones IP enumeradas. Cada usuario configura su propia lista de direcciones IP que permite el acceso al recurso.
La aplicación Ops Manager tiene el concepto de roles, que permiten un control más detallado sobre las operaciones que un usuario puede realizar. Los recursos de la API también hacen cumplir las mismas reglas de autorización, por lo que los recursos y métodos a los que se puede acceder con una clave de API se rigen por los roles otorgados al usuario asociado.
Ejemplo
Para
DELETEun host, el usuario que posee la clave API utilizada para hacer la solicitud debe ser unProject Monitoring AdminoProject Owneren el proyecto al que pertenece el host.Muchos recursos están vinculados a un proyecto (anteriormente conocido como grupo), tal como lo demuestran las URLdel formulario siguiente:
/api/public/v1.0/groups/{PROJECT-ID}/ Para acceder a estos recursos, el usuario vinculado a la clave API debe ser miembro del proyecto o tener asignado uno de los roles
GLOBAL. De lo contrario, la aplicación Ops Manager responderá con un error HTTP 401.
Automatización
El recurso Configuración de automatización y los recursos Obtener el estado de automatización del plan más reciente proporcionan endpoints que permiten modificar la implementación de un proyecto y recuperar el estado de la implementación. Puedes modificar una implementación enviando una nueva configuración de automatización a Ops Manager. La configuración de la automatización es donde se describen y configuran los procesos de MongoDB que se van a implementar. Ops Manager se refiere a esto como el 'estado objetivo' de la implementación. Cuando envías una nueva configuración de automatización a través de la API, las automatizaciones ajustan el estado actual del sistema para que coincida con el estado objetivo.
Importante
No hay protección en la API para evitar modificaciones simultáneas. Si dos administradores parten de una configuración basada en la versión actual, hacen sus propias modificaciones y luego las envían, la modificación hecha por el segundo administrador prevalecerá.
Información Adicional
Consulte Recursos de la API de administración de Ops Manager para obtener una referencia completa de todos los recursos disponibles en la API Pública de Ops Manager.