كيفية تبديل base_uri مع httparty
سؤال
أحاول تمرير معلمة إلى a login
الطريقة وأريد تبديل عنوان uri الأساسي بناءً على تلك المعلمة.
مثل ذلك:
class Managementdb
include HTTParty
def self.login(game_name)
case game_name
when "game1"
self.base_uri = "http://game1"
when "game2"
self.base_uri = "http://game2"
when "game3"
self.base_uri = "http://game3"
end
response = self.get("/login")
if response.success?
@authToken = response["authToken"]
else
# this just raises the net/http response that was raised
raise response.response
end
end
...
لا يتم تعيين معرف uri الأساسي عندما أستدعيه من إحدى الطرق، كيف يمكنني تشغيل ذلك؟
المحلول
في HTTParty، base_uri
هو طريقة الطبقة الذي يحدد تجزئة الخيارات الداخلية.لتغييره ديناميكيًا من داخل طريقة الفصل المخصصة الخاصة بك login
يمكنك فقط تسميتها كطريقة (وليس تعيينها كما لو كانت متغيرًا).
على سبيل المثال، تغيير التعليمات البرمجية الخاصة بك أعلاه، يجب تعيين هذا base_uri
كما تتوقع:
...
case game_name
when "game1"
# call it as a method
self.base_uri "http://game1"
...
نأمل أن يساعد.
نصائح أخرى
لا أستطيع التعليق بعد، لذا إليك امتدادًا لإجابة إستانيسلاو تريبات.
لتعيين base_uri
ل جميع مكالماتك, ، استدعاء طريقة الفصل حسب:
self.base_uri "http://api.yourdomain.com"
إذا كنت تريد أن يكون لديك طريقة للإرسال فقط عدد قليل من المكالمات إلى URI مختلف وتجنب أخطاء الحالة (نسيان العودة إلى URI الأصلي) يمكنك استخدام المساعد التالي:
def self.for_uri(uri)
current_uri = self.base_uri
self.base_uri uri
yield
self.base_uri current_uri
end
باستخدام المساعد أعلاه، يمكنك إجراء مكالمات محددة إلى معرفات URI أخرى مثل ما يلي:
for_uri('https://api.anotheruri.com') do
# your httparty calls to another URI
end
أنا لست متأكدا من تنفيذها عند طلب هذا السؤال لأول مرة، ولكن إذا كنت ترغب في تعيين أو تجاوز GransodicetagCode على أساس لكل طلب أو على أساس كل حالة، فإن طرق طلب HTTParty (: GET،: النشر، إلخ) قبول الخيارات لتجاوز خيارات الفئة.
حتى مثال على المرجع، يمكن أن تبدو مثل هذا: giveacodicetagpre.
استدعاء طريقة الفصل ديناميكيا، كما هو مقترح في بعض الإجابات الأخرى، وتغيير base_uri لطلبات جميع ، والتي ربما لا تكون ما تريد.انها بالتأكيد ليست آمنة الخيط.