

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

A continuación, se muestra un ejemplo de consulta de lectura:

------
#### [ AWS CLI ]

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://your-neptune-endpoint:port \
  --open-cypher-query "MATCH (n1) RETURN n1"
```

Para obtener más información, consulte [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)la Referencia de AWS CLI comandos.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://your-neptune-endpoint:port',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.execute_open_cypher_query(
    openCypherQuery='MATCH (n1) RETURN n1'
)

print(response['results'])
```

Para ver ejemplos de AWS SDK en otros idiomas, consulte[AWS SDK](access-graph-opencypher-sdk.md).

------
#### [ awscurl ]

```
awscurl https://your-neptune-endpoint:port/openCypher \
  --region us-east-1 \
  --service neptune-db \
  -X POST \
  -d "query=MATCH (n1) RETURN n1"
```

**nota**  
En este ejemplo se supone que sus AWS credenciales están configuradas en su entorno. *us-east-1*Sustitúyala por la región de tu cúmulo de Neptuno.

------
#### [ curl ]

```
curl https://your-neptune-endpoint:port/openCypher \
  -d "query=MATCH (n1) RETURN n1"
```

------

Este es un ejemplo de write/update consulta:

------
#### [ AWS CLI ]

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://your-neptune-endpoint:port \
  --open-cypher-query "CREATE (n:Person { age: 25 })"
```

Para obtener más información, consulte [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)la Referencia de AWS CLI comandos.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://your-neptune-endpoint:port',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.execute_open_cypher_query(
    openCypherQuery='CREATE (n:Person { age: 25 })'
)

print(response['results'])
```

Para ver ejemplos de AWS SDK en otros idiomas, consulte[AWS SDK](access-graph-opencypher-sdk.md).

------
#### [ awscurl ]

```
awscurl https://your-neptune-endpoint:port/openCypher \
  --region us-east-1 \
  --service neptune-db \
  -X POST \
  -d "query=CREATE (n:Person { age: 25 })"
```

**nota**  
En este ejemplo se supone que sus AWS credenciales están configuradas en su entorno. *us-east-1*Sustitúyala por la región de tu cúmulo de Neptuno.

------
#### [ curl ]

```
curl https://your-neptune-endpoint:port/openCypher \
  -d "query=CREATE (n:Person { age: 25 })"
```

------

## 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 