Faraday: طلب الميزة: تعريف طريقة صريحة لأفعال HTTP

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

يبدو أن المستوى الأعلى HTTP الفعل الأساليب (مثل Faraday.get يتم التعامل) عن طريق missing_method إنشاء وكلاء ل default_connection ايفار. بالإضافة إلى كونه صبيًا غير فعال (من المسلم به أنه مصدر قلق بسيط مقارنة بوقت استجابة طلب الشبكة النموذجي) ، فإنه يتسبب في حدوث مشكلات مع الأدوات المختلفة:

  • الأساليب لا تكتمل تلقائيًا في pry ، solargraph ، إلخ.
  • لم يتم التقاط الوثائق من خلال https://www.rubydoc.info/gems/faraday/Faraday
  • فشل الاستخدام في فحص نوع شربات (على الرغم من أنني حاولت إصلاح هذا في https://github.com/sorbet/sorbet-typed/pull/268/commits/83132c1b19c50ad7516ecc806243afbd3445b98d ، لكنه عرضة للانجراف)

هل ستكون قادرًا على استبدال هذا التطبيق بتعريفات طريقة واضحة؟

documentation

ال 12 كومينتر

مرحبًا dduugg ، بدلاً من تحديد الأساليب بشكل صريح ، كنت
نستخدم تعريف البرمجة الوصفية في الاتصال أيضًا: https://github.com/lostisland/faraday/blob/master/lib/faraday/connection.rb#L195

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

مرحبًا iMacTia ، شكرًا على الرد. لا أعتقد أن المشكلة قابلة للحل من خلال التوثيق. هل يمكنني أن أزعجك في توضيح مقاومة التعاريف الصريحة؟ أعتقد أن هذا من شأنه أن يشكل إطارًا للمناقشة بشكل أفضل. على سبيل المثال ، من المحتمل أن يكون أسلوب التوثيق مطولًا تمامًا (حساب توجيهات @!method & @!scope ، بالإضافة إلى رمز method_missing ) من سبعة توجيهات صريحة لإعادة التوجيه مؤلفة من سطر واحد أقترح على Faraday . لكني لا أعرف ما إذا كان هذا هو الأساس المنطقي هنا (تتم قراءة الكود أكثر بكثير مما هو مكتوب ، لذلك أعتقد أن التحسين لكاتب الكود هو خطأ على أي حال).

هناك نقطتان أساسيتان وضعتني على الحياد مع هذا التغيير.

  • أنا شخصياً لا أعتقد أن استخدام delegates هو ميزة فقط لكاتب الشفرة. لقد كنت أستخدم لغة Ruby منذ سنوات ، ومثل الآخرين ، أصبحت أقدر التركيب المقتضب لهذه اللغة. عندما أقرأ بعض التعليمات البرمجية ووجدت delegates أعرف على الفور ما يعنيه ذلك ويمكن أن يؤدي إلى تكثيف عشرات الأسطر من التعليمات البرمجية في بضع سطور فقط.
  • وكلاء أفعال HTTP ليسوا المثال الوحيد في Faraday حيث نستفيد من metaprogramming ، فهناك العديد من الأمثلة التي تعاني على الأرجح من نفس المشكلة التي أثارتها هنا ، ولكن لم يتم ملاحظتها بعد. ستؤدي الموافقة على هذا التغيير إلى إجراء استثناء أو إنشاء سابقة ، وكلا الأمرين أود تجنبهما.

لكن بدلاً من التركيز على مقاومتي لهذا التغيير ، أفضل مناقشة نوع المزايا التي نحاول تقديمها هنا. أتفهم تمامًا المشكلة التي تصفها وأعتقد أنه يجب علينا محاولة حلها إن أمكن!
لذلك إذا كانت المشكلة الرئيسية هنا هي التوافق مع IDEs / الأدوات الخاصة باقتراحات الكود والإكمال التلقائي والتوثيق ، فأنا ببساطة أقترح إيجاد حل بديل مثل تعليقات التوثيق (نحن بالفعل نستخدم YARD على نطاق واسع).
وأنت محق أيضًا عندما تقول أن هذا الحل مطول تمامًا ، على الرغم من أنني أجادل بأن التعليق لن يؤثر على قابلية القراءة بقدر تأثيره على قائمة الأساليب ويمكن التعرف عليه بسهولة.

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

  • لا تمنع قابلية الاكتشاف استخدام البرمجة الوصفية (على الرغم من أنني أعتقد في هذه الحالة المحددة أن def s هو السبيل للذهاب) ، ولكنها تتطلب استبدال نهج method_missing ، كما هو موضح سابقًا.
  • لست متأكدًا من فهمي الوسيطة delegates . لا يبدو أن فاراداي يستخدم مفوضين صريحين في التعامل مع طرق فعل HTTP. (الارتباك في هذه النقطة ربما يكون رائحة رمز أن تنفيذ طرق فعل HTTP معقد للغاية).
  • سيتعين علينا أن نتفق على عدم الموافقة على أن delegate وما شابه ذلك هي مساعدة لكاتب الشفرة. أنا أعمل مع أشخاص لديهم عقدين من الخبرة الجماعية الياقوتية ، ولم نعثر على أي فوائد للقراءة للنهج هنا (حتى مع خصم الوقت الضائع لمحاولة استكشاف API عبر pry و YARD و sorbet و solargraph ). قد يكون من المفيد مشاهدة محاولة روبي لاستكشاف واجهة برمجة التطبيقات هذه لأول مرة ، على الأقل في هذه النقطة المحددة.

مجرد محاولة تقديم بعض الملاحظات الصادقة (ونأمل أن تكون مفيدة) هنا. ما زلت أقدر الوقت والجهد المبذولين في هذه المساهمة في OSS.

مرحبًا ، شكرًا على كل عملك الشاق في Faraday! أعلم أن هذه مشكلة قديمة ، لكني أميل إلى الموافقة على أن قابلية الاكتشاف تمثل مشكلة إلى حد ما. أنا أعمل على بعض البرامج الوسيطة وأضفت هذا القسم إلى برنامج README الخاص بي. مكتبتي موجهة نحو شخص ربما لم يستخدم فاراداي من قبل ، لذا يتعين عليّ شرح الأمور. سأقول (بتردد إلى حد ما) أنه لم يكن من السهل حل الأمور.

image

gurgeous أوافق على أن التوثيق هو بالتأكيد واجهة يمكننا من خلالها القيام بعمل أفضل (على الرغم من أننا بدأنا في معالجة هذا من خلال إطلاق موقع Faraday على الويب ) ، لكنني لا أرى كيف سيحل الاقتراح في هذه المشكلة وجهة نظرك المحددة.

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

لهذا السبب أعتقد أن التوثيق المحسن (المرئي أو في الكود) هو السبيل لحل هذه المشكلة.
لكن ربما أفتقد شيئًا ما هنا أو حالة استخدام معينة حيث لا يساعد التوثيق الأفضل؟
هل فهمي لـ "قابلية الاكتشاف" صحيح؟

هل فهمي لـ "قابلية الاكتشاف" صحيح؟

ليس في حالتي. كان توقعي أن أكون قادرًا على القيام بـ ls Faraday في pry ، متبوعًا بـ $ Faraday.get ، وما إلى ذلك إذا أردت الغوص في طريقة معينة. أشعر أنني تمكنت من القيام بذلك بشكل فعال مع أي جوهرة أخرى استخدمتها ، ونادراً (إن وجدت) أحتاج إلى الانتقال إلى صفحة التوثيق ، ومن ثم فتح هذه التذكرة. (هذا بالإضافة إلى المشكلات الأخرى المذكورة أعلاه ، مثل فشل أدوات التحليل الثابت في التعرف على الكود الذي يستخدم المكتبة.)

شكرا مرة أخرى لسماعنا.

أنا أحب موقع فاراداي! ربما يمكنني تقديم العلاقات العامة مع بعض الاقتراحات؟ يسعدني مساعدتك. أعتقد أن هذا النوع من الجهد يؤتي ثماره دائمًا للقادمين الجدد. إعلمني ان كنت مهتما.

من حيث pry + ls Faraday ، أنا أيضًا معجب بهذا النمط وأستخدمه على نطاق واسع. الابتعاد عن method_missing ليس بالفكرة السيئة. يتم سحب روبي ببطء في هذا الاتجاه مع ظهور Ruby 3 ، وخوادم اللغة ، و RBS ، وما إلى ذلك ، وأعتقد أن هذا ثانوي بالنسبة للمستندات ، على الرغم من ذلك.

gurgeous نحن _are_ مهتمون بتوثيق طلبات السحب ، ابحث عن دليل docs/ مع مجموعة من Gemfile (و README) التي تُستخدم لنشر موقع الويب على صفحات GitHub ، التي نستخدمها. إذا كان استخدامه غير واضح ، عملية تحديث موقع الويب ، يرجى فتح مشكلة أو بيان علاقات عامة لـ _that_ أيضًا.

شكرا لاهتمامكم بمستخدمي فاراداي!

أنا أحب موقع فاراداي! ربما يمكنني تقديم العلاقات العامة مع بعض الاقتراحات؟ يسعدني مساعدتك. أعتقد أن هذا النوع من الجهد يؤتي ثماره دائمًا للقادمين الجدد. إعلمني ان كنت مهتما.

تضمين التغريدة نرحب دائمًا بالمساعدة في تحسين التوثيق أو موقع الويب ، حيث إن الأشياء الواضحة لنا نحن المشرفين قد لا تكون واضحة للمستخدمين. بالإضافة إلى أننا نكافح حقًا مع الوقت وغالبًا ما يأتي ذلك بتكلفة التوثيق. في الواقع، فإن الوثائق تكون في حالة أسوأ بكثير لو لم يكن لاستمرارolleolleolle جهود 😄!

على النقطة pry (ccdduugg) ، لم أستخدمها مطلقًا ، ولهذا السبب ربما كنت أفشل في فهمها.
لقد جربته للتو مع التفاصيل الإضافية الخاصة بك ولاحظت أن ls Faraday::Connection يعرض الأساليب التي تم إنشاؤها ديناميكيًا بالإضافة إلى الأساليب المفوضة.
لذا فهمي الأصلي أننا لا نستطيع استخدام هذا النوع من "سحر" روبي كان خاطئًا ، والحقيقة أن الحد الوحيد هو استخدام missing_method .

ما لم أكن مغرمًا به هو إدخال طرق صريحة مثل ما يلي:

def self.get(...)
  ...
end

def self.post(...)
  ...
end

# ... and so on ...

ولكن إذا تمكنا من إصلاح اكتشاف pry عن طريق إضافة تعريفات ديناميكية أو تفويضات إلى الوحدة النمطية Faraday ، فهذا شيء سأكون موافقًا عليه. آسف لعدم الحصول عليه في المرة الأولى!

لا تقلق بشأن ضيق الوقت. لا تشعر بالسوء أبدًا لكونك مشرفًا مفتوح المصدر! نحن نقدر جهودك بغض النظر. لقد كنت هناك أيضًا ...

سأبدأ مناقشة حول المستندات للتأكد من أننا على نفس الصفحة.

iMacTia كيف يعرف المستخدم أن يبحث في Faraday::Connection ؟ لقد قمت منذ ذلك الحين بالتبديل إلى جوهرة HTTP مع واجهة برمجة تطبيقات قابلة للاكتشاف ، لكنني ألقيت نظرة سريعة على https://lostisland.github.io/faraday/usage/ ولم يستخدمها أي من أمثلة التعليمات البرمجية بشكل صريح (على الرغم من أن الأخير يفعل ذلك بشكل ضمني). تستدعي الأمثلة في الغالب طرقًا ثابتة على Faraday ، لكنها غير موجودة في النقب. لا أعرف أي جوهرة أخرى اتبعت هذا النهج ، وما زلت أرى أنه نمط مضاد.

شكرا ، كالعادة ، لسماع صوتي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

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

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

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

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

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

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