El punto de conexión HTTPS de openCypher en Amazon Neptune - Amazon Neptune

El punto de conexión HTTPS de openCypher en Amazon Neptune

Consultas de lectura y escritura de openCypher en el punto de conexión HTTPS

El punto de conexión HTTPS de openCypher admite consultas de lectura y actualización mediante el método GET y POST. No se admiten los métodos DELETE y PUT.

Las siguientes instrucciones le guiarán a través de la conexión al punto de conexión de openCypher utilizando el comando curl y HTTPS. Siga estas instrucciones desde una instancia de Amazon EC2 que esté 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"

Estos son ejemplos de consultas de escritura/actualización, 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 JSON de openCypher 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 } } ] } ] }

Encabezados finales HTTP opcionales para las respuestas de openCypher de varias partes

Esta característica está disponible a partir de la versión 1.4.5.0 del motor de Neptune.

La respuesta HTTP a las consultas y actualizaciones de openCypher normalmente se devuelve en varios fragmentos. Cuando se producen errores después de enviar los fragmentos de respuesta iniciales (con un código de estado HTTP de 200), puede resultar difícil diagnosticar el problema. De forma predeterminada, Neptune informa de dichos 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, puede habilitar los encabezados finales incluyendo un encabezado final (te: trailers) con codificación de transferencia (TE) en su 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 uno de los códigos 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.

Consulte la página de MDN sobre los encabezados de las solicitudes TE para obtener más información.

Ejemplo de uso de encabezados finales de openCypher

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 la respuesta:

El ejemplo anterior muestra cómo una respuesta de openCypher 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 el inicio de la transmisión, (2) los resultados JSON parciales (interrumpidos) que se transmitieron 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 TimeLimitExceededException) e información detallada sobre el error.