使用httparty+graph+sintra + json 实现若干接口
在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'
