

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Titik akhir HTTPS Amazon OpenCypher Neptunus
<a name="access-graph-opencypher-queries"></a>

**Topics**
+ [OpenCypher membaca dan menulis kueri pada titik akhir HTTPS](#access-graph-opencypher-queries-read-write)
+ [Format hasil OpenCypher JSON default](#access-graph-opencypher-queries-results-simple-JSON)
+ [Header tambahan HTTP opsional untuk respons multi-bagian OpenCypher](#optional-http-trailing-headers)

**catatan**  
Neptunus saat ini tidak mendukung HTTP/2 untuk permintaan REST API. Klien harus menggunakan HTTP/1.1 saat menghubungkan ke titik akhir.

## OpenCypher membaca dan menulis kueri pada titik akhir HTTPS
<a name="access-graph-opencypher-queries-read-write"></a>

Titik akhir OpenCypher HTTPS mendukung kueri baca dan pembaruan menggunakan metode `GET` dan metode. `POST` `PUT`Metode `DELETE` dan tidak didukung.

Instruksi berikut memandu Anda melalui koneksi ke OpenCypher titik akhir menggunakan `curl` perintah dan HTTPS. Anda harus mengikuti petunjuk ini dari instans Amazon EC2 di virtual private cloud (VPC) yang sama seperti instans DB Neptune Anda.

Sintaksnya adalah:

```
HTTPS://(the server):(the port number)/openCypher
```

Berikut adalah contoh kueri baca:

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

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

Untuk informasi selengkapnya, lihat [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)di Referensi AWS CLI Perintah.

------
#### [ 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'])
```

Untuk contoh AWS SDK dalam bahasa lain, lihat[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"
```

**catatan**  
Contoh ini mengasumsikan bahwa AWS kredensil Anda dikonfigurasi di lingkungan Anda. Ganti *us-east-1* dengan Wilayah cluster Neptunus Anda.

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

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

------

Berikut adalah contoh write/update kueri:

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

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

Untuk informasi selengkapnya, lihat [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)di Referensi AWS CLI Perintah.

------
#### [ 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'])
```

Untuk contoh AWS SDK dalam bahasa lain, lihat[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 })"
```

**catatan**  
Contoh ini mengasumsikan bahwa AWS kredensil Anda dikonfigurasi di lingkungan Anda. Ganti *us-east-1* dengan Wilayah cluster Neptunus Anda.

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

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

------

## Format hasil OpenCypher JSON default
<a name="access-graph-opencypher-queries-results-simple-JSON"></a>

Format JSON berikut dikembalikan secara default, atau dengan mengatur header permintaan secara eksplisit ke. `Accept: application/json` Format ini dirancang agar mudah diurai menjadi objek menggunakan fitur bahasa asli dari sebagian besar perpustakaan.

Dokumen JSON yang dikembalikan berisi satu bidang`results`, yang berisi nilai pengembalian kueri. Contoh di bawah ini menunjukkan format JSON untuk nilai-nilai umum.

**Contoh respons nilai:**

```
{
  "results": [
    {
      "count(a)": 121
    }
  ]
}
```

**Contoh respons simpul:**

```
{
  "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
        }
      }
    }
  ]
}
```

**Contoh respons hubungan:**

```
{
  "results": [
    {
      "r": {
        "~id": "7389",
        "~entityType": "relationship",
        "~start": "22",
        "~end": "151",
        "~type": "route",
        "~properties": {
          "dist": 956
        }
      }
    }
  ]
}
```

**Contoh respons jalur:**

```
{
  "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
          }
        }
      ]
    }
  ]
}
```

## Header tambahan HTTP opsional untuk respons multi-bagian OpenCypher
<a name="optional-http-trailing-headers"></a>

 [Fitur ini tersedia dimulai dengan rilis mesin Neptunus 1.4.5.0.](https://docs.aws.amazon.com/releases/release-1.4.5.0.xml) 

 Respons HTTP terhadap OpenCypher kueri dan pembaruan biasanya dikembalikan dalam beberapa potongan. Ketika kegagalan terjadi setelah potongan respons awal dikirim (dengan kode status HTTP 200), mungkin sulit untuk mendiagnosis masalah. Secara default, `Neptunus melaporkan kegagalan tersebut dengan menambahkan pesan kesalahan ke badan pesan, yang mungkin rusak karena sifat streaming dari respons. 

**Menggunakan header trailing**  
 Untuk meningkatkan deteksi dan diagnosis kesalahan, Anda dapat mengaktifkan header trailing dengan menyertakan header trailer transfer-encoding (TE) (te: trailer) dalam permintaan Anda. Melakukan hal ini akan menyebabkan Neptune menyertakan dua bidang header baru dalam header trailing dari potongan respons: 
+  `X-Neptune-Status`— berisi kode respons diikuti dengan nama pendek. Misalnya, dalam kasus keberhasilan, header trailing akan berupa: `X-Neptune-Status: 200 OK`. Dalam kasus kegagalan, kode respons akan menjadi kode kesalahan mesin Neptunus seperti. `X-Neptune-Status: 500 TimeLimitExceededException` 
+  `X-Neptune-Detail`— kosong untuk permintaan yang berhasil. Dalam kasus kesalahan, ia berisi pesan kesalahan JSON. Karena hanya karakter ASCII yang diperbolehkan dalam nilai header HTTP, string JSON di-enkode dengan URL. Pesan kesalahan juga masih ditambahkan ke badan pesan respons. 

 Untuk informasi selengkapnya, lihat [halaman MDN tentang header permintaan TE](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/TE). 

**OpenCypher contoh penggunaan header trailing**  
 Contoh ini menunjukkan bagaimana header trailing membantu mendiagnosis kueri yang melebihi batas waktunya: 

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

**Rincian respons:**  
 Contoh sebelumnya menunjukkan bagaimana OpenCypher respons dengan header tambahan dapat membantu mendiagnosis kegagalan kueri. Di sini kita melihat empat bagian berurutan: (1) header awal dengan status 200 OK yang menunjukkan streaming dimulai, (2) hasil JSON sebagian (rusak) berhasil dialirkan sebelum kegagalan, (3) pesan kesalahan yang ditambahkan yang menunjukkan batas waktu, dan (4) header trailing yang berisi status akhir (500) dan informasi kesalahan terperinci. TimeLimitExceededException 