我正在尝试使用httparty
gem实现post
操作,这是我所拥有的。我正在docker中运行所有内容,下面的代码将作为活动作业运行。我在一个服务中,我正在尝试在其他服务中发布API。我能够获取,但没有任何与发布的运气。我在网上看了很多,搜索了很多,但是我不确定我做错了什么。我总是在self.class.post
行得到错误403
。我还尝试做一个 Postman 调用API,我能够击中api,但与下面的代码,它甚至没有达到其他服务。
任何帮助都很感激。谢谢。
require 'uri'
class CustomerProductAPI
include HTTParty
format :json
def initialize(customer_product_id)
@customer_product = CustomerProduct.find(customer_product_id)
@customer = Customer.find(@customer_product.student_id)
@product = Product.find(@customer_product.product_id)
self.class.base_uri environment_based_uri + '/customer_product_api'
end
def create_customer_product
uri = URI(self.class.base_uri + "/customer/#{customer.id}")
self.class.post(uri, body: body_hash).response.value
end
private
attr_reader :customer_product, :customer, :product
def body_hash
{
token: ENV['CUSTOMER_PRODUCT_API_TOKEN'],
customer: customer.name,
product: product.name,
}
end
def environment_based_uri
ENV['CUSTOMER_PRODUCT_URL']
end
end
1条答案
按热度按时间a0x5cqrl1#
虽然我们实际上不能确切地确定接受响应的服务器期望什么,但您肯定在这里做了相当多的非惯用的事情,这将聚集故障排除。
base_uri
应该只在类体中设置。而不是在每个示例的initialize
中设置。您也不需要使用HTTParty构造URI。只需传递一个路径,它将构造相对于base_uri的请求URI。ENV.fetch
而不是括号访问器,因为它将引发KeyError,而不是让nil
偷偷通过。