我有兩個 rails 應用程式,一個是 graphql API,另一個也是 REST API 應用程式。讓我們呼叫 graphql 應用程式graphi和 REST 應用程式resti。
graphi 將資料發送到resti。
resti 然后與外部 API 對話,從該外部 API 獲取回應,并以良好的回應與 graphi 對話。
好的,所以 graphi 有一個名為 vendor 的突變。看起來像這樣:
mutation {
createVendor(
input: {
vendorId: 2,
quoteType: "renter",
renterData: {
firstName: "Tony",
lastName: "Stark",
email: "tony@starkindustries",
phoneType: "mobile",
phone: "6504881234",
requestType: "renter",
address1: "123 Main Street",
addressCity: "Palo Alto",
addressState: "CA",
addressZip: "94301",
dob: "1990-07-22"
}
}
)
}
然后我通過 httparty 發送這些資料,如下所示create_vendor.rb (mutation file):
class CreateVendor < Mutations::BaseMutation
description 'Create a vendor'
argument :vendor_id, ID, required: false
argument :quote_type, String, required: true
argument :renter_data, Types::RenterVendorType, required: false
field :vendor, Types::VendorType, null: false
def resolve(args)
response = HTTParty.post(
'http://localhost:3001/api/v2/vendor', <-- this sends data to resti
body: JSON.parse(args.to_json),
headers: AUTHORIZATION_HEADERS
)
if response.success?
puts "Cool, I was successfull"
else
puts "I wasn't successful"
end
end
end
一旦 graphi 將資料發送到 resti,resti 服務器看起來像這樣:
Processing by Api::V2::VendorController#create as */*
Parameters: {"vendor_id"=>"2", "quote_type"=>"renter", "renter_data"=>{"first_name"=>"Tony", "last_name"=>"Stark", "email"=>"tony@starkindustries", "phone_type"=>"mobile", "phone"=>"6504881234", "request_type"=>"renter", "address1"=>"123 Main Street", "address_city"=>"Palo Alto", "address_state"=>"CA", "address_zip"=>"94301", "dob"=>"1990-07-22"}}
現在,這不再是 graphql 的東西了,它傳遞為帶有一個嵌套引數的散列。
在resti的控制器上,我有一些事情要做permit vendor params
def create_vendor_params
params.require(:vendor).permit(
:vendor_id, :quote_type, renter_data: %i[first_name last_name email phone_type phone request_type address1 address_city address_state address_zip DOB]
)
end
問題
當我完成這個流程時,我在 resti 服務器上收到了這個問題:
ActionController::ParameterMissing (param is missing or the value is empty: vendor
Did you mean? vendor_id
renter_data
action
quote_type):
當我使用這個資料結構在 Postman 上測驗同樣的東西時:
{ "vendor": {
"vendor_id": 2,
"quote_type": "renter",
"renter_data": {
"first_name":"Tony",
"last_name":"Stark",
"email":"[email protected]",
"phone_type":"mobile",
"phone":"6504881234",
"request_type":"renter",
"address1":"123 Main Street",
"address_city":"Palo Alto",
"address_state":"CA",
"address_zip":"94301",
"DOB":"1990-07-22"
}
}
}
我在下面收到這個:
#<ActionController::Parameters {"vendor"=>#<ActionController::Parameters (#<ActionController::Parameters this piece of code is ruining everything,) {"_id"=>2, "quote_type"=>"renter", "renter_data"=>{"first_name"=>"Tony", "last_name"=>"Stark", "email"=>"[email protected]", "phone_type"=>"mobile", "phone"=>"6504881234", "request_type"=>"renter", "address1"=>"123 Main Street", "address_city"=>"Palo Alto", "address_state"=>"CA", "address_zip"=>"94301", "DOB"=>"1990-07-22"}} permitted: false>, "controller"=>"api/v2/vendor", "action"=>"create"} permitted: false>
現在有些事情我不明白為什么會發生這種情況。當我byebug在這段代碼上:
def create_vendor_params
params.require(:vendor).permit(
:vendor_id, :quote_type, renter_data: %i[first_name last_name email phone_type phone request_type address1 address_city address_state address_zip DOB]
)
byebug
end
我手動執行此操作:
(byebug) params.require(:vendor).permit(
:vendor_id, :quote_type, renter_data: %i[first_name last_name email phone_type phone request_type address1 address_city address_state address_zip DOB]
)
它列印出這個:
#<ActionController::Parameters {"vendor_id"=>2, "quote_type"=>"renter", "renter_data"=>#<ActionController::Parameters {"first_name"=>"Tony", "last_name"=>"Stark", "email"=>"[email protected]", "phone_type"=>"mobile", "phone"=>"6504881234", "request_type"=>"renter", "address1"=>"123 Main Street", "address_city"=>"Palo Alto", "address_state"=>"CA", "address_zip"=>"94301", "DOB"=>"1990-07-22"} permitted: true>} permitted: true>
被允許了!!
為什么會這樣?graphql 如何構造資料?我將非常感謝您的幫助!
uj5u.com熱心網友回復:
您發送到的引數resti的形狀不正確。如果您仔細觀察,引數并沒有vendor像您通過 Postman 發送它們時那樣嵌套在 a 下。
您的突變應具有以下結構突變
createVendor(
input: {
vendor: {
vendorId: 2,
quoteType: "renter",
renterData: {
firstName: "Tony",
lastName: "Stark",
email: "tony@starkindustries",
phoneType: "mobile",
phone: "6504881234",
requestType: "renter",
address1: "123 Main Street",
addressCity: "Palo Alto",
addressState: "CA",
addressZip: "94301",
dob: "1990-07-22"
}
}
}
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486279.html
上一篇:Ruby中的拆分和回圈
下一篇:如何在水豚中編輯日歷輸入元素
