

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
<a name="access-graph-opencypher-queries"></a>

**Topics**
+ [OpenCypher consultas de lectura y escritura en el punto final HTTPS](#access-graph-opencypher-queries-read-write)
+ [El formato de resultados OpenCypher JSON predeterminado](#access-graph-opencypher-queries-results-simple-JSON)
+ [Cabeceras finales HTTP opcionales para respuestas de varias partes OpenCypher](#optional-http-trailing-headers)

**nota**  
Actualmente, Neptune no admite HTTP/2 para las solicitudes de la API REST. Los clientes deben usar HTTP/1.1 al conectarse a los puntos finales.

## OpenCypher consultas de lectura y escritura en el punto final HTTPS
<a name="access-graph-opencypher-queries-read-write"></a>

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`.

En las siguientes instrucciones, se explica cómo conectarse al OpenCypher punto final mediante el `curl` comando 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 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
<a name="access-graph-opencypher-queries-results-simple-JSON"></a>

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
<a name="optional-http-trailing-headers"></a>

 Esta característica está disponible a partir de la versión [1.4.5.0](https://docs.aws.amazon.com/releases/release-1.4.5.0.xml) del motor de 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 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](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/TE) para obtener más información. 

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