graph query

在Gemfile增加gem json和httparty

增加测试的脚本 ens.rb

require 'json'
require 'httparty'
server_url = 'https://ensgraph.test-lueluelue-link.com/subgraphs/name/graphprotocol/ens'
response = httparty.post server_url,
  :headers => { 'content-type' => 'application/json', 'accept' => 'application/json'},
  :body => {
    #"query": "query myquery {\n  domains(where: {name: \"bitsofcode.eth\"}) {\n    id\n    labelname\n    name\n    resolver {\n      id\n    }\n    labelhash\n    owner {\n      id\n    }\n    parent {\n      id\n      labelname\n      labelhash\n      name\n    }\n    subdomaincount\n    subdomains {\n      id\n      labelname\n      labelhash\n      name\n    }\n    resolvedaddress {\n      id\n      domains {\n        labelname\n        labelhash\n        name\n      }\n    }\n    ttl\n  }\n}",
    "query": "query myquery {\n  domains(where: {name_contains: \"bitsofcode.eth\"}) {\n    name\n    id\n    labelhash\n  }\n  registration(\n    id: \"0x25c26fd2b6c4dc073ae089f5354a505e6266a0047aefdcb47baff2d736c523ca\"\n  ) {\n    id\n    expirydate\n    labelname\n    registrationdate\n    cost\n  }\n}",
    "variables": nil,
    "operationname": "myquery",
    "extensions":{"headers": nil}
  }.to_json

然后进行测试,放在app.rb

+  get "/name" do
+    server_url = 'https://ensgraph.test-lueluelue-link.com/subgraphs/name/graphprotocol/ens'
+    response = HTTParty.post server_url,
+      :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'},
+      :body => {
+        "query": "query MyQuery {\n  domains(where: {name: \"bitsofcode.eth\"}) {\n    id\n    labelName\n    name\n    resolver {\n      id\n    }\n    labelhash\n    owner {\n      id\n    }\n    parent {\n      id\n      labelName\n      labelhash\n      name\n    }\n    subdomainCount\n    subdomains {\n      id\n      labelName\n      labelhash\n      name\n    }\n    resolvedAddress {\n      id\n      domains {\n        labelName\n        labelhash\n        name\n      }\n    }\n    ttl\n  }\n}",
+        "variables": nil,
+        "operationName": "MyQuery",
+        "extensions":{"headers": nil}
+      }.to_json
+    puts "== response: #{response}"
+    body = JSON.parse(response.body)
+    domains = body['data']['domains'][0]
+    puts "==domains"
+    puts domains.inspect
+
+    response_registration = HTTParty.post server_url,
+      :headers => { 'content-type' => 'application/json', 'accept' => 'application/json'},
+      :body => {
+        "query": "query MyQuery {\n  registration(\n    id: \"#{domains['labelhash']}\"\n  ) {\n    id\n    expiryDate\n    labelName\n    registrationDate\n    cost\n  }\n}",
+        "variables": nil,
+        "operationname": "myquery",
+        "extensions":{"headers": nil}
+      }.to_json
+
+      puts "== response_registration: #{response_registration}"
+      body_registration = JSON.parse(response_registration.body)
+      puts body_registration['data'].inspect
+      registration = body_registration['data']['registration']
+      puts "==registration"
+      puts registration.inspect
+    json({#注意json的格式,多行json,外层需要增加()
+      code: 1,
+      message: 'success',
+      result: {
+        name: "#{domains['name']}",
          ......     } })

因为json部分数据需要根据graph的数据进行变化,所以进行参数的替换,并进行两次抓取

接口的参数需要根据需求进行设置,在内容已经设置了参数#{name},在接口api可以根据'/name/:name'进行设置参数,使用:'/name/lihua'

或者:'/name',使用:'/name?name=liuli'