

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 final OpenCypher HTTPS de Amazon Neptune
<a name="access-graph-opencypher-queries"></a>

**Topics**
+ [OpenCypher consulta 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)
+ [Encabezados finales HTTP opcionales para respuestas de varias partes OpenCypher](#optional-http-trailing-headers)

**nota**  
Actualmente, Neptune no admite HTTP/2 solicitudes de API REST. Los clientes deben usarlo HTTP/1.1 cuando se conectan a los puntos finales.

## OpenCypher consulta 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 `POST` método `GET` y. No se admiten los métodos `DELETE` y `PUT`.

En las instrucciones siguientes 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
```

Este es 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 [https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html) execute-open-cypher-query en la Referencia de comandos. AWS CLI 

------
#### [ 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 presupone que AWS las credenciales están configuradas en su entorno. {{us-east-1}}Sustitúyala por la región de tu clúster 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 [https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html) execute-open-cypher-query en la referencia de comandos. AWS CLI 

------
#### [ 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 presupone que AWS las credenciales están configuradas en su entorno. {{us-east-1}}Sustitúyala por la región de tu clúster 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
          }
        }
      ]
    }
  ]
}
```

## Encabezados 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 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](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 los errores de consulta. Aquí vemos cuatro partes secuenciales: (1) los encabezados iniciales con un estado 200 OK que indica que ha comenzado la transmisión, (2) los resultados JSON parciales (interrumpidos) que se transmiten 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) y la información detallada del error. TimeLimitExceededException 