يتقن | ديف |
---|---|
مكون إضافي لـ Fat Free Framework: يربط بين التعليمات البرمجية الخاصة بك وواجهة برمجة تطبيقات REST الخارجية. يعمل F3-wcurl كطبقة تجريد منطقية لـ cURL، والتي تتعامل مع المصادقة والتخزين المؤقت للاستجابة الناجحة.
يعد مكون Web
الإضافي المدمج F3 رائعًا وسهل التعامل مع طلبات HTTP الفردية. يبني F3-wcurl تنفيذ واجهة برمجة التطبيقات البعيدة بالكامل داخل التعليمات البرمجية الخاصة بك.
مع مرور الوقت، كنت بحاجة إلى إنشاء أدوات ونصوص برمجية تتضمن مهمة واحدة أساسية ولكنها متكررة بسرعة: التعامل مع طلبات cURL والإعدادات والكائنات والاستجابات وما إلى ذلك. وفي النهاية، واصلت نسخ نفس الوظائف وتعديلها وتصحيح نفس المشكلات التي أدت إلى عدم عمل شيء ما منذ أشهر .
على الرغم من أن لديك سيطرة كبيرة على خيارات cURL والوصول إليها، إلا أن F3-wcurl لا يجبرك على القيام بذلك. فهو يتيح التركيز على الطلب نفسه، وما الذي يتغير ويتلقاه في المقابل. باعتباره مكونًا إضافيًا لنظام F3 البيئي، فإنه بطبيعة الحال حصل على عدد قليل من التبعيات الرائعة - Prefab
Cache
Web
(ليس لطلبات cURL نفسها).
تم إنشاء فئة F3 من مجموعة ترابطية من الإعدادات ذات الصلة. يمكن تمرير المصفوفة من أي من التعليمات البرمجية مباشرة، أو من ملف INI (الذي تم استيراده إلى F3 قبل إنشاء F3-wcurl) وتخزينه في خلية F3.
يستخدم F3-wcurl الجاهز وذاكرة التخزين المؤقت الخاصة بـ F3، مما يسمح باستدعاء كائن wcurl نفسه في أي مكان من التعليمات البرمجية ودوران الاستجابة السريعة.
افتراضيًا، سيبحث F3-wcurl عن مفتاح wcurl
في خلية F3، لكن يمكن لـ INI الاحتفاظ بالإعدادات بشكل ملائم لتطبيقات REST API المختلفة.
$ wcurl = wcurl:: instance ([ $ iniName = ' wcurl ' | $ optionsArray ]);
تحدد بنية الصفيف البسيطة إلى حد ما طريقة العمل الداخلية لـ wcurl:
اسم | يكتب | تقصير | وصف |
---|---|---|---|
جذر | خيط | باطل | جذر API البعيد، والذي يُستخدم لإنشاء URI للطلب. |
cb_login | خيط | باطل | قم بتعيين وظيفة رد الاتصال من التعليمات البرمجية الخاصة بك، والتي يمكنها إجراء المصادقة، والتي يجب أن تكون رد اتصال صالحًا لـ call_user_func() |
ttl | عدد صحيح | 60 | ثواني، كم من الوقت يتم تخزين استجابات GET في ذاكرة التخزين المؤقت |
رؤوس | صفيف | [ ] | cURL مجموعة صالحة من السلاسل ["Header: value"، "Another-Header: Value"] |
com.useragent | خيط | نسخة F3-wcurl | سلسلة وكيل المستخدم |
com.basauth | خيط | باطل | أرسل رؤوس المصادقة الأساسية، واستخدمها بتنسيق username:password |
queryToken | خيط | باطل | قم بإلحاق كل طلب برمز URL المميز |
com.encodeJSON | منطقية | حقيقي | يقوم الطقس بإجراء تسلسل لنص POST كـ JSON، وسيؤدي الإعداد false إلى إرسال النص كنموذج HTML عادي |
curlopt | صفيف | [ ] | إعدادات RAW cURL مجموعة إعدادات RAW cURL للتحكم التام، مع key => val حيث يمكن أن يكون المفتاح إما ثابتًا أو اسم سلسلة منه |
تقع | صفيف | [ ] | key => val لمساعدي إنشاء عناوين URL (راجع قسم الأمثلة) |
لتعيين أي خيار من الجدول أعلاه، قم بتمرير key => val
مع خيار واحد أو أكثر.
$ wcurl -> setOptions (
[
' useragent ' = > ' F3-wcurl API integration ' ,
' encodeJSON ' = > false ,
' ttl ' = > 300 ,
// etc
]
);
سيتم تحديث الخيارات التي تمررها فقط، وسيظل كل شيء آخر في الحالة السابقة/الافتراضية.
لمسح خيار واحد أو أكثر، قم بتمرير اسم أو قائمة مصفوفة المفاتيح التي ترغب في إعادة تعيينها إلى الإعدادات الافتراضية:
$ wcurl -> clearOptions ([ ' useragent ' , ' ttl ' /*, ... etc */ ]);
للحصول على مجموعة كاملة من الخيارات التي تمثل الحالة الحالية لفئة wcurl:
$ wcurl -> clearOptions ();
يجب أن تكون المصفوفة متعددة الأبعاد التي تم إرجاعها متوافقة لإنشاء نفس الفئة تمامًا مثل تلك المستخرجة منها.
سيُرجع إحصائيات حول عدد الطلبات التي تم تنفيذها منذ إنشاء الفصل، وكم عدد استجابات http المستلمة وعدد الطلبات التي تم تقديمها من ذاكرة التخزين المؤقت.
$ wcurl -> getStats ();
الوظائف المدعومة حاليًا هي GET وPOST وPUT وPATCH وDELETE. على الرغم من أنني سأضيف المزيد عندما أتعرف على الحاجة إلى تنفيذها.
$ response = $ wcurl -> get ( string $ url [, array $ fill = null [, array $ options = null ]] );
أنا أحفظ مثل هذه الحجج.
جسم غامض:
$ response = $ wcurl ->post( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - عنوان URL، التعبئة، النص، الخيارات
$ response = $ wcurl ->put( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - عنوان URL، التعبئة، النص، الخيارات
$ response = $ wcurl ->patch( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - عنوان URL، التعبئة، النص، الخيارات
$ response = $ wcurl ->delete( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - عنوان URL، التعبئة، النص، الخيارات
تخدم طاولة المساند غرضين على نفس القدر من الأهمية:
عند إنشاء مسارات عناوين URL طويلة وبعيدة، يكون من الأسهل تذكرها باستخدام كلمات رئيسية قصيرة، خاصة إذا تم استدعاؤها من أماكن متعددة. قم بالإعجاب allmembers
بدلاً من /lists/members/all/pages
. في بعض الأحيان تحتوي هذه أيضًا على معلمات فريدة يجب ملؤها لكل طلب. يعد هذا المفهوم أحد الأسباب الرئيسية لوجود هذا البرنامج المساعد.
استمر في القراءة.
أفضل الطرق هي تخزين المسارات البعيدة في تكوين .ini
. يتم تغليف متغيرات URL للتعبئة بنسبة 2 %
من كلا الجانبين.
المهام: اجعل حرف الالتفاف هذا قابلاً للتكوين.
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
أو قم بتمرير key => value
بسرعة - سيتم دمجها مع التكوين السابق
$ wcurl -> setOptions (
' rests ' => [
' allmembers ' => ' /lists/members/all/pages ' ,
' withVariable ' => ' /lists/members/%%memberID%%/pages ' ,
' updateEmail ' => ' /lists/members/%%memberID%%/update '
]
);
لاستخدام المسار المسمى، قم بتمرير اسمه بدلاً من المسار الكامل
$ response = $ wcurl -> get ( ' allmembers ' );
سيتم حل هذا إلى /lists/members/all/pages
$ response = $ wcurl -> get ( ' withVariable ' , array ( ' memberID ' => ' abc123ID ' ) );
سيتم حل هذا إلى /lists/members/abc123ID/pages
أو في طلب POST نعلم أنه يجب اجتياز معلمات UFBO التالية
$ wcurl -> post ( ' updateEmail ' , // path shorthand to resolve name
[ ' memberID ' => ' abc123ID ' ], // fill this in the path
[ ' email ' => ' [email protected] ' ] // body to send
);
إذا قمت بوضع كل التكوينات في ملف ini
الرئيسي الخاص بك، فلا يمكن تهيئة الفئة إلا عند أول استخدام مطلوب لها. أي عندما يقرر الكود الخاص بك إرسال get(). في تلك اللحظة، إذا لم يتم تسجيل الفصل في المبنى الجاهز، فسيتم إنشاؤه من تكوين INI تمامًا حسب الحاجة.
للحصول على قائمة كاملة بالخيارات، راجع جدول مصفوفة الخيارات الذي يحتوي على عدد قليل من اللفائف أعلاه.
[wcurl]
root =http://mysite.api/v1
ttl =3600
cb_login =yourClass::cb_do_login
useragent = Zeus was here
headers = " Header: value " , " Another-Header: Value "
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
; Using with multiple API's
[apitwo]
root =http://yoursite.io/v2
ttl =60
useragent = Big Falcon Rocket
[apitwo.rests]
getUsers =/lists/members/all/pages
getOneUser =/lists/members/%%memberID%%/pages
$ wcurl -> setLogin ( callback ' yourClass::cb_do_login ' );
إذا أدى أي طلب إلى كود HTTP 401 أو 403، فإن wcurl
يستدعي وظيفة رد اتصال تسجيل الدخول ثم يكرر الطلب الأصلي. إذا حدث خطأ مرة أخرى، فسيتم إرجاعه إلى نتيجة الوظيفة الأصلية. يقوم wcurl
بتخزين ملفات تعريف الارتباط في ملف مؤقت فريد لجذر API. يتم تضمين ملف تعريف الارتباط هذا في كل طلب.
يجب أن يعود رد الاتصال صحيحًا، في حالة نجاح تسجيل الدخول، وإلا فسيفشل في تكرار الطلب تلقائيًا بعد نجاح المصادقة.
ن!ب! إذا لم يعمل تسجيل الدخول، ولكن لا يزال return true
، فقد يتسبب ذلك request->login->request->login...
حلقة المصدر
مثال على وظيفة تسجيل الدخول
static function cb_do_login (){
$ wcurl = wcurl:: instance ();
$ login = $ wcurl -> post ( " /login " , array (
' login ' => ' my_user ' ,
' password ' => ' covfefe ' )
);
if ( $ login [ ' status ' ][ ' http_code ' ]== 200 ){
return true ;
}
// or
$ wcurl -> setOptions ( [ ' basicauth ' => " $ user : $ password " ]);
}
عند استدعاء wcurl::instance()
يتم إرجاعه مثل فئة Singleton، وبالتالي يتم استخدام نفس الكائن في أي مكان في الكود. لفرض مثيل جديد من الفصل، استخدم شيئًا مثل
$ apiTwo = new wcurl ([ $ iniName | $ optionsArray ]);
ومن ثم يمكن تخزين $apiTwo
في خلية F3.
هناك الكثير مما يجب تحسينه، ولكنني سأعمل حاليًا على توفير الميزات التي أحتاجها. إذا كان هناك شيء غير ممكن لحالة الاستخدام الخاصة بك، فأرسل مشكلة أو حتى علاقات عامة. شكرًا لمطوري F3 على هذا الإطار الرائع. إذا كنت تبحث عن شيء مثل F3-wcurl، لكنك لا تستخدمه، ففكر مرتين - لماذا لا تستخدم F3 حتى الآن؟