翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
トピック
HTTPS エンドポイントでの OpenCypher 読み取りおよび書き込みクエリ
OpenCypher HTTPS エンドポイントは、 と POST
メソッドの両方を使用した読み取りGET
クエリと更新クエリをサポートします。DELETE
と PUT
メソッドはサポートされていません。
次の手順では、 curl
コマンドと HTTPS を使用して OpenCypher エンドポイントに接続する方法について説明します。Neptune DB インスタンスと同じ仮想プライベートクラウド (VPC) の Amazon EC2 インスタンスからこれらの手順を実行してください。
構文は次のとおりです。
HTTPS://
(the server)
:(the port number)
/openCypher
以下に、読み取りクエリーのサンプルを示します。片方は POST
を、もう一方は GET
を使います。
1. POST
を使用する:
curl HTTPS://
server
:port
/openCypher \ -d "query=MATCH (n1) RETURN n1;"
2. GET
を使用する (クエリ文字列は URL に符号化されています)。
curl -X GET \ "HTTPS://
server
:port
/openCypher?query=MATCH%20(n1)%20RETURN%20n1"
以下に、書き込み/更新クエリのサンプルを示します。片方はPOST
を、もう一方は GET
を使います。
1. POST
を使用する:
curl HTTPS://
server
:port
/openCypher \ -d "query=CREATE (n:Person { age: 25 })"
2. GET
を使用する (クエリ文字列は URL に符号化されています)。
curl -X GET \ "HTTPS://
server
:port
/openCypher?query=CREATE%20(n%3APerson%20%7B%20age%3A%2025%20%7D)"
デフォルトの OpenCypher JSON 結果形式
次の JSON 形式がデフォルトで返されます。または、リクエストヘッダーを明示的に Accept: application/json
に設定することで返されます。このフォーマットは、ほとんどのライブラリのネイティブ言語機能を使用してオブジェクトに簡単に解析できるように設計されています。
返される JSON ドキュメントには、1 つのフィールドが含まれています。results
には、クエリの戻り値が含まれています。以下の例は、一般的な値の JSON フォーマットを示しています。
値のレスポンスの例:
{
"results": [
{
"count(a)": 121
}
]
}
ノードレスポンスの例:
{
"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
}
}
}
]
}
リレーションシップレスポンスの例:
{
"results": [
{
"r": {
"~id": "7389",
"~entityType": "relationship",
"~start": "22",
"~end": "151",
"~type": "route",
"~properties": {
"dist": 956
}
}
}
]
}
パスレスポンスの例:
{
"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
}
}
]
}
]
}
マルチパート OpenCypher レスポンス用のオプションの HTTP 末尾ヘッダー
この機能は、Neptune エンジンリリース 1.4.5.0 以降で使用できます。
OpenCypher クエリと更新に対する HTTP レスポンスは通常、複数のチャンクで返されます。初期レスポンスチャンクの送信後に障害が発生した場合 (HTTP ステータスコードが 200)、問題を診断するのは難しい場合があります。デフォルトでは、「Neptune」はエラーメッセージをメッセージ本文に追加することで、このような障害を報告します。エラーメッセージは、レスポンスのストリーミングの性質が原因で破損する可能性があります。
末尾のヘッダーの使用
エラーの検出と診断を向上させるには、リクエストに Transfer-encoding (TE) トレーラーヘッダー (te: トレーラー) を含めることで、末尾のヘッダーを有効にできます。これを行うと、Neptune はレスポンスチャンクの末尾ヘッダー内に 2 つの新しいヘッダーフィールドを含めます。
-
X-Neptune-Status
– レスポンスコードとそれに続く短縮名が含まれます。たとえば、成功した場合、末尾ヘッダーは次のようになります。X-Neptune-Status: 200 OK
。失敗した場合、レスポンスコードは などの Neptune エンジンエラーコードになりますX-Neptune-Status: 500 TimeLimitExceededException
。 -
X-Neptune-Detail
– リクエストが成功した場合は空です。エラーの場合は、JSON エラーメッセージが含まれます。HTTP ヘッダー値には ASCII 文字しか使用できないため、JSON 文字列は URL 符号化されます。エラーメッセージは、レスポンスメッセージ本文にも追加されます。
詳細については、TE リクエストヘッダーに関する MDN ページ
OpenCypher 末尾ヘッダーの使用例
この例では、末尾のヘッダーが時間制限を超えるクエリの診断にどのように役立つかを示します。
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
レスポンスの内訳:
前の例は、末尾のヘッダーを持つ OpenCypher レスポンスがクエリ障害の診断にどのように役立つかを示しています。ここでは、(1) ストリーミングの開始を示す 200 OK ステータスの初期ヘッダー、(2) 失敗前に正常にストリーミングされた部分的な (壊れた) JSON 結果、(3) タイムアウトを示す追加エラーメッセージ、(4) 最終ステータス (500 TimeLimitExceededException) と詳細なエラー情報を含む末尾のヘッダーの 4 つの連続した部分を示します。