Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
El punto de conexión HTTPS de Amazon Neptune OpenCypher
Temas
OpenCypher leer y escribir consultas en el punto de enlace HTTPS
El punto final OpenCypher HTTPS admite consultas de lectura y actualización mediante el método GET
y el POST
método. No se admiten los métodos DELETE
y PUT
.
Las siguientes instrucciones explican cómo conectarse al OpenCypher punto final mediante el curl
comando y HTTPS. Debe seguir estas instrucciones desde una EC2 instancia de Amazon en la misma nube privada virtual (VPC) que su instancia de base de datos de Neptune.
La sintaxis es la siguiente:
HTTPS://
(the server)
:(the port number)
/openCypher
Estos son ejemplos de consultas de lectura, una que usa POST
y otra que usa GET
.
1. Uso de POST
:
curl HTTPS://
server
:port
/openCypher \ -d "query=MATCH (n1) RETURN n1;"
2. Uso de GET
(la cadena de consulta está codificada en una URL):
curl -X GET \ "HTTPS://
server
:port
/openCypher?query=MATCH%20(n1)%20RETURN%20n1"
A continuación, se muestran ejemplos de write/update consultas, una que usa POST
y otra que usa: GET
1. Uso de POST
:
curl HTTPS://
server
:port
/openCypher \ -d "query=CREATE (n:Person { age: 25 })"
2. Uso de GET
(la cadena de consulta está codificada en una URL):
curl -X GET \ "HTTPS://
server
:port
/openCypher?query=CREATE%20(n%3APerson%20%7B%20age%3A%2025%20%7D)"
El formato de resultados OpenCypher JSON predeterminado
El siguiente formato JSON se devuelve de forma predeterminada o si se establece explícitamente el encabezado de la solicitud en Accept: application/json
. Este formato está diseñado para poder analizarse fácilmente en objetos utilizando las características del lenguaje nativo de la mayoría de las bibliotecas.
El documento JSON que se devuelve contiene un campo, results
, que contiene los valores devueltos por la consulta. Los ejemplos siguientes muestran el formato JSON para valores comunes.
Ejemplo de respuesta de valor:
{ "results": [ { "count(a)": 121 } ] }
Ejemplo de respuesta de nodo:
{ "results": [ { "a": { "~id": "22", "~entityType": "node", "~labels": [ "airport" ], "~properties": { "desc": "Seattle-Tacoma", "lon": -122.30899810791, "runways": 3, "type": "airport", "country": "US", "region": "US-WA", "lat": 47.4490013122559, "elev": 432, "city": "Seattle", "icao": "KSEA", "code": "SEA", "longest": 11901 } } } ] }
Ejemplo de respuesta de relación:
{ "results": [ { "r": { "~id": "7389", "~entityType": "relationship", "~start": "22", "~end": "151", "~type": "route", "~properties": { "dist": 956 } } } ] }
Ejemplo de respuesta de ruta:
{ "results": [ { "p": [ { "~id": "22", "~entityType": "node", "~labels": [ "airport" ], "~properties": { "desc": "Seattle-Tacoma", "lon": -122.30899810791, "runways": 3, "type": "airport", "country": "US", "region": "US-WA", "lat": 47.4490013122559, "elev": 432, "city": "Seattle", "icao": "KSEA", "code": "SEA", "longest": 11901 } }, { "~id": "7389", "~entityType": "relationship", "~start": "22", "~end": "151", "~type": "route", "~properties": { "dist": 956 } }, { "~id": "151", "~entityType": "node", "~labels": [ "airport" ], "~properties": { "desc": "Ontario International Airport", "lon": -117.600997924805, "runways": 2, "type": "airport", "country": "US", "region": "US-CA", "lat": 34.0559997558594, "elev": 944, "city": "Ontario", "icao": "KONT", "code": "ONT", "longest": 12198 } } ] } ] }
Cabeceras finales HTTP opcionales para respuestas de varias partes OpenCypher
Esta función está disponible a partir de la versión 1.4.5.0 del motor Neptune.
La respuesta HTTP a OpenCypher las consultas y actualizaciones suele devolverse en varios fragmentos. Cuando se producen errores después de enviar los fragmentos de respuesta iniciales (con un código de estado HTTP igual a 200), diagnosticar el problema puede resultar difícil. De forma predeterminada, `Neptune informa de estos errores añadiendo un mensaje de error al cuerpo del mensaje, que puede estar dañado debido a la naturaleza de transmisión de la respuesta.
Uso de encabezados finales
Para mejorar la detección y el diagnóstico de errores, puedes habilitar los encabezados finales incluyendo un encabezado de tráileres con codificación de transferencia (TE) (te: trailers) en tu solicitud. Si lo hace, Neptune incluirá dos nuevos campos de encabezados dentro de los encabezados finales de los fragmentos de respuesta:
-
X-Neptune-Status
— contiene el código de respuesta seguido de un nombre abreviado. Por ejemplo, en caso de que se realizara correctamente, el encabezado final sería:X-Neptune-Status: 200 OK
. En caso de fallo, el código de respuesta sería un código de error del motor de Neptune, como.X-Neptune-Status: 500 TimeLimitExceededException
-
X-Neptune-Detail
— está vacío si las solicitudes se han realizado correctamente. En caso de errores, contiene el mensaje de error JSON. Como solo se permiten caracteres ASCII en los valores de los encabezados HTTP, la cadena JSON está codificada en URL. El mensaje de error también se sigue adjuntando al cuerpo del mensaje de respuesta.
Para obtener más información, consulta la página de MDN sobre los encabezados de las solicitudes de TE
OpenCypher ejemplo de uso de encabezados finales
En este ejemplo se muestra cómo los encabezados finales ayudan a diagnosticar una consulta que supera su límite de tiempo:
curl --raw 'https://your-neptune-endpoint:port/openCypher' \ -H 'TE: trailers' \ -d 'query=MATCH(n) RETURN n.firstName' Output: < HTTP/1.1 200 OK < transfer-encoding: chunked < trailer: X-Neptune-Status, X-Neptune-Detail < content-type: application/json;charset=UTF-8 < < { "results": [{ "n.firstName": "Hossein" }, { "n.firstName": "Jan" }, { "n.firstName": "Miguel" }, { "n.firstName": "Eric" }, {"detailedMessage":"Operation terminated (deadline exceeded)", "code":"TimeLimitExceededException", "requestId":"a7e9d2aa-fbb7-486e-8447-2ef2a8544080", "message":"Operation terminated (deadline exceeded)"} 0 X-Neptune-Status: 500 TimeLimitExceededException X-Neptune-Detail: %7B%22detailedMessage%22%3A%22Operation+terminated+%28deadline+exceeded%29%22%2C%22code%22%3A%22TimeLimitExceededException%22%2C%22requestId%22%3A%22a7e9d2aa-fbb7-486e-8447-2ef2a8544080%22%2C%22message%22%3A%22Operation+terminated+%28deadline+exceeded%29%22%7D
Desglose de respuestas:
El ejemplo anterior muestra cómo una OpenCypher respuesta con encabezados finales puede ayudar a diagnosticar errores en las consultas. Aquí vemos cuatro partes secuenciales: (1) los encabezados iniciales con un estado 200 OK que indica que la transmisión ha comenzado, (2) los resultados JSON parciales (rotos) que se han transmitido correctamente antes del error, (3) el mensaje de error adjunto que muestra el tiempo de espera y (4) los encabezados finales que contienen el estado final (500) e información de error detallada. TimeLimitExceededException