本文介紹如何使用HTTP REST方式連接和操作圖數(shù)據(jù)庫(kù)GDB。REST API兼容Gremlin3.3.x和3.4.0版本。

前提條件

請(qǐng)確保圖數(shù)據(jù)庫(kù)GDB的實(shí)例與您的ECS虛擬機(jī)處于同一個(gè)VPC網(wǎng)絡(luò)環(huán)境。

操作步驟

以下示例中,需要將配置信息替換成您的圖數(shù)據(jù)庫(kù)實(shí)例的相關(guān)信息。
  • 將${your-gdb-endpoint}改為您的圖數(shù)據(jù)庫(kù)GDB實(shí)例的域名。
  • 將${username}改為您的圖數(shù)據(jù)庫(kù)GDB實(shí)例的用戶(hù)名。
  • 將${password}改為您的圖數(shù)據(jù)庫(kù)GDB實(shí)例的密碼。
  1. 圖數(shù)據(jù)庫(kù)GDB的HTTP接入點(diǎn)為${your_gdb_endpoint}:8182/gremlin
  2. 連接時(shí)可以使用GET請(qǐng)求,也可以使用POST請(qǐng)求。建議使用POST請(qǐng)求進(jìn)行操作:
    curl -u ${username}:${password} -X POST -d '{"gremlin":"g.V().limit(1)"}' http://${your_gdb_endpoint}:8182/gremlin
    //此處注意需要對(duì)label值的雙引號(hào)進(jìn)行轉(zhuǎn)義
    curl -u ${username}:${password} -X POST -d '{"gremlin":"g.V().hasLabel(\"movie\").limit(10)"}' http://${your_gdb_endpoint}:8182/gremlin
    curl -u ${username}:${password} "http://${your_gdb_endpoint}:8182/gremlin?gremlin=g.V().limit(1)"
  3. 使用REST請(qǐng)求訪(fǎng)問(wèn)服務(wù)器的時(shí)候,可以以binding形式攜帶參數(shù):
    curl -u ${username}:${password} -X POST -d '{"gremlin":"g.V().limit(n)","bindings":{"n":1}}' http://${your_gdb_endpoint}:8182/gremlin
  4. 返回結(jié)果示例如下:
    {
        "requestId": "e640005a-f2fd-403e-812c-f61e7a3fb7cb",
        "result": {
            "data": {
                "@type": "g:List",
                "@value": [
                    {
                        "@type": "g:Vertex",
                        "@value": {
                            "id": "3a63cc90-d957-4324-9ffc-16a8e4c1c1f4",
                            "label": "label",
                            "properties": {
                                "pint": [
                                    {
                                        "@type": "g:VertexProperty",
                                        "@value": {
                                            "id": "3a63cc90-d957-4324-9ffc-16a8e4c1c1f4",
                                            "label": "label",
                                            "value": {
                                                "@type": "g:Int32",
                                                "@value": 3
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                ]
            },
            "meta": {
                "@type": "g:Map",
                "@value": []
            }
        },
        "status": {
            "attributes": {
                "@type": "g:Map",
                "@value": []
            },
            "code": 200,
            "message": ""
        }
    }

以上示例是使用 g.V().limit(n) 遍歷返回GDB中的部分點(diǎn)。更多DSL范例,請(qǐng)參見(jiàn)文檔通過(guò)Gremlin Console連接實(shí)例

REST接口支持模板化調(diào)用方式,示例如下:
DSL硬編碼
g.V().hasLabel('gdb_sample_person').drop()
           |
           |
           V
模板化調(diào)用
g.V().hasLabel(label).drop()
bindings:{"label":"gdb_sample_person"}

有關(guān)Gremlin REST接口的更多信息,請(qǐng)參閱Apache TinkerPop3文檔中的Connecting via HTTP