Faraday: يحذف مع الجثث

تم إنشاؤها على ١٧ مايو ٢٠١٧  ·  23تعليقات  ·  مصدر: lostisland/faraday

تغيرت مواصفات HTTP في عام 2014 وتسمح بالحذف بأن يكون له نصوص. هل هناك خطة موضوعة لحل طريقة التفويض فيما يتعلق بـ connect.rb للسماح لجسم باستخدام طريقة الحذف وعدم الخروج منه؟

feature

التعليق الأكثر فائدة

لأي شخص لا يزال ينتظر هذا ، وجدت الحل التالي الذي يبدو أنه يعمل في حالتي:

conn = Faraday.new
body = {
some_key: 'some value'
}
conn.run_request(:delete, url, body, headers)

آمل أن يساعد هذا شخصًا ما حتى لا يعود حذف الجسم افتراضيًا

ال 23 كومينتر

سيتم عرض العلاقات العامة قريبًا لمراجعتك.

مرحبًا @ Carlbc18 ،

هل يمكنك توفير رابط للتغييرات المذكورة أعلاه؟
أعتقد أن هذا صحيح فقط لمواصفات HTTP 2.0 ، لذلك قد نحتاج إلى النظر في هذه الميزة بعناية.

https://tools.ietf.org/html/rfc7231#section -4.3.5

لمعلوماتك: تنطبق نفس المجموعة النصية على طلبات GET && HEAD أيضًا.

على وجه التحديد هذا الجزء من المواصفات:

لا تحتوي الحمولة الموجودة في رسالة طلب DELETE على دلالات محددة ؛
قد يؤدي إرسال نص حمولة على طلب DELETE إلى وجود بعض
تطبيقات لرفض الطلب.

لدي تغيير في الكود مع الاختبارات التي تعمل (لست متأكدًا مما إذا كنت تريد ذلك). كيف أقوم بإنشاء علاقات عامة لهذا المشروع؟

أعتقد أن هذا صحيح فقط لمواصفات HTTP 2.0 ، لذلك قد نحتاج إلى النظر في هذه الميزة بعناية.

هذا في الواقع جزء من HTTP 1.1

سأفكر فيه بالتأكيد إذا كنت تريد إنشاء علاقات عامة.
يمكنك القيام بذلك كما هو الحال مع أي ريبو آخر ، ببساطة قم بتقسيم faraday وقم بتطبيق التغييرات على مفترقك ، ثم قم بإنشاء علاقات عامة لفرعنا الرئيسي.

شكرا iMacTia. سوف أطرحه. ما هي آرائك حول تغيير الإصدار الذي يحتوي أخيرًا على رقم إصدار رئيسي مع هذا؟ قد ينكسر هذا التغيير بالنسبة للكثيرين. أرغب في اتباع نمط semver ، وإصدار faraday ليكون 1.0.0 في هذه المرحلة. دعني ارى آراءك.

نحن بالتأكيد نحاول التمسك بـ semver وقد حددنا الإصدار 1.0 مع بعض التغييرات العاجلة.
إذا كان هذا التغيير سيؤدي إلى كسر التوافق مع الإصدارات السابقة ، فسيتم إصداره فقط في الإصدار 1.0 (والذي لا يحتوي حاليًا على تاريخ إصدار ثابت).
ومع ذلك ، ما أفهمه هو أنه يجب أن تكون قادرًا الآن على إضافة جسم اختياريًا إلى طلبات GET و HEAD و DELETE ، لذا ألا يجب أن يكون ذلك متوافقًا مع الإصدارات السابقة؟ هل فاتني شيء؟

iMacTia i تم إصداره إلى 0.13.0 والعلاقات العامة أعلى. يمكننا نقل أي محادثة أخرى حول هذا إلى العلاقات العامة لأنني متأكد من أنه ستكون هناك تعليقات. شكرا لك مرة أخرى!

هذه متابعة على https://github.com/lostisland/faraday/pull/695#issuecomment -305145499.
بادئ ذي بدء ، يجب أن نقرر كيف نود أن يعمل هذا.
بافتراض أن التغييرات يجب أن تكون متوافقة مع الإصدارات السابقة ، يجب أن يعمل ما يلي:

conn = Faraday.new(...)
conn.get('/path', {page: 1, per: 10})

# performs "GET /path?page=1&per=10"

الخيار 1 كما هو مذكور في تعليقي هو جعل هذا السلوك قابلاً للتكوين:

conn = Faraday.new(..., standard: :http1_1)
conn.get('/path', {page: 1, per: 10})

# performs "GET /path" with body "page=1&per=10" (assuming www_form_url_encoded request)

بدلاً من ذلك ، قد يعني الخيار 2 شيئًا أكثر قوة:

conn = Faraday.new(...) # note no special config here
conn.get('/path', {page: 1, per: 10}, body: {some_key: 'some_value')

# performs "GET /path?page=1&per=10" with body "some_key=some_value"

ومع ذلك ، هناك مشكلة ، قد يعمل الخيار 2 فقط مع روبي> = 2 لأن روبي 1.9 لا يدعم معلمات الكلمات الرئيسية 😞

أعتقد فيما يتعلق بهذا عدم العمل على روبي 1.9 أشعر أن هذا جيد. يبلغ عمر روبي 1.9 سنوات عديدة. أود أن أدعو إلى إصدار نسخة تصل إلى 2.0 على الأقل للحصول على الحد الأدنى من إصدار الياقوت ، والذي من شأنه أن يتماشى مع إصدار v1.0 من Faraday. أيضًا الخيار 2 يتبع المواصفات http 1.1 عن كثب في رأيي حيث سيكون لديك خيار تمرير parms و / أو نص اختياري.

أشعر أن محاولة الحفاظ على التوافق مع الإصدارات السابقة مع ميزة مواصفات http التي تعمل مع Ruby 1.9 ستسبب مشاكل. أعتقد أن هذه الميزة ستكون أكثر ملاءمة لـ V1 من Faraday. أشعر أن هناك العديد من المتغيرات التي كانت بحاجة لدعم هذا التغيير (روبي الخامس ، تمرير بارامز). ربما أنا أفكر كثيرا ....

أعتقد فيما يتعلق بهذا عدم العمل على روبي 1.9 أشعر أن هذا جيد. يبلغ عمر روبي 1.9 سنوات عديدة. أود أن أدعو إلى إصدار نسخة تصل إلى 2.0 على الأقل للحصول على الحد الأدنى من إصدار الياقوت ، والذي من شأنه أن يتماشى مع إصدار v1.0 من Faraday. أيضًا الخيار 2 يتبع المواصفات http 1.1 عن كثب في رأيي حيث سيكون لديك خيار تمرير parms و / أو نص اختياري.

أنا أتفق تماما مع ما ورد أعلاه. هذا بالفعل أفضل مسار للعمل ، على الرغم من أن هذا يعني أنه لا يزال يتعين علينا انتظار الإصدار 1.0

لذلك لتحديد واجهة برمجة تطبيقات متوافقة مع الإصدارات السابقة الإصدار 1.0 ، يمكننا محاولة ما يلي:

الحصول على الطلبات وتوجيهها وحذفها

conn = Faraday.new(...) # note no special config here
conn.get(path, url_params, body: {...})
# second parameter is URL PARAMS, optionally accept a named parameter for request body
# works the same for head and delete

طلبات POST ، PUT ، PATCH

conn = Faraday.new(...) # note no special config here
conn.post(path, body, url_params: {...})
# second parameter is REQUEST BODY, optionally accept a named parameter for url_params
# works the same for put and patch

أعتقد أننا بهذه الطريقة نغطي كل مجموعة ممكنة ونوسع طلبات النشر / الوضع / التصحيح أيضًا!

توافق بالتأكيد. هل نريد رفض العلاقات العامة الخاصة بي وفتح واحدة جديدة لذلك؟ هل هناك قطع فرع V1 يمكننا العمل عليه؟

يسعدني إغلاق ذلك والبدء من الصفر لأنه سيكون مختلفًا تمامًا. اسف على ذلك!

سأقوم بإنشاء فرع V1 قبل الدمج ، لذا لا تتردد في البدء من الرئيسي وسأعيد توجيه العلاقات العامة :)

مرحبًا @ Carlbc18 أردت فقط إخبارك بأن الفرع 1.0 متوفر الآن لك 😃.

شكرا شكرا! 😀

لأي شخص لا يزال ينتظر هذا ، وجدت الحل التالي الذي يبدو أنه يعمل في حالتي:

conn = Faraday.new
body = {
some_key: 'some value'
}
conn.run_request(:delete, url, body, headers)

آمل أن يساعد هذا شخصًا ما حتى لا يعود حذف الجسم افتراضيًا

فهل هناك أي تحديث حول موعد توفر ذلك؟

لم أر أي علاقات عامة حتى الآن ، لكن الأعمال على الإصدار 1 تتقدم ببطء.
قد أكون قادرًا على العمل على هذا بنفسي ولكن لا يمكنني تقديم تقدير في الوقت الحالي.
يتم شرح واجهة برمجة التطبيقات المحدثة حول كيفية عمل الطلبات في تعليقي أعلاه ، لذلك إذا أراد أي شخص الحصول على لقطة قبلي ، فإن العلاقات العامة موضع ترحيب كبير.

للحصول على حل متوافق تمامًا مع الإصدارات السابقة ، يمكن تفريع العلاقات العامة خارج النطاق الرئيسي ، ويمكنني إصدار إصدار 0.x آخر.
إذا كان التغيير سيؤدي إلى كسر التوافق مع الإصدارات السابقة ، فمن الأفضل التفرع من فرع 1.0

https://github.com/lostisland/faraday/pull/855 عبارة عن مسودة علاقات عامة لدعم ذلك.

أنا أرفض هذه الميزة. يمكنك استخدام نموذج الكتلة في Faraday لتقديم طلب بهيئة:

conn.delete(url) do |req|
  req.body = { some_key: 'some value' }
end

كانت هذه الفكرة ستجعل عمليات الحذف البسيطة للأجسام بطبقة واحدة ، لكن التنفيذ يضيف تعقيدًا وسلوكًا مفاجئًا أكثر مما أريد. نموذج الكتلة هذا يعمل بشكل رائع في فاراداي بالفعل. أفضل تعديل الخصائص في فئة على إضافة المزيد من الوسائط إلى طريقة:

conn.delete('/foo/1') do |req|
  req.headers["X-Men"] = "marvel"
  req.params[:confirm] = 1
  req.body = { some_key: 'some value' }
end
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Lewiscowles1986 picture Lewiscowles1986  ·  4تعليقات

luizkowalski picture luizkowalski  ·  3تعليقات

jedeleh picture jedeleh  ·  3تعليقات

QuinnWilton picture QuinnWilton  ·  4تعليقات

jeffb-stell picture jeffb-stell  ·  5تعليقات