5.7 KiB
title | localeTitle |
---|---|
REST APIs with Falcon | واجهات برمجة التطبيقات REST مع Falcon |
المقدمة
واجهات برمجة التطبيقات (REST) هي مكوّن رئيسي لأي رصة متقنة الصنع ، ويصادف أن بيثون تمتلك بعض أطر العمل اللامعة لتكوين واجهات برمجة التطبيقات بسرعة. واحد من هذه الأطر يسمى الصقر - وهو رائع! إنه في الأساس عبارة عن هيكل مجهري ، وهو مزود بعدد كبير من المزايا:
-
إنه سريع سريع حقا. تحقق من المعايير هنا .
-
يتم تعريف موارد HTTP على أنها فئات ، مع استخدام أساليب الفئات لعمليات REST المختلفة على هذه الموارد. هذا يساعد على الحفاظ على مصدر برنامج نظيف.
-
انها قابلة للتوسع جدا - تحقق من هذا القسم على الويكي الخاص بهم ، للحصول على الشعور به.
-
يعتمد على WSGI - المعيار البايثوني لتطبيقات الويب - لذا فهو يعمل مع Python 2.6 و 2.7 و 3.3+. وإذا كنت بحاجة إلى المزيد من الأداء ، فقم بتشغيله باستخدام PyPy!
ابدء
أولا ، دعونا نعد بيئتنا. شخصيا، وانها دائما كبيرة للعمل في البيئات الافتراضية - يمكنك استخدام virtualenv
، virtualenvwrapper
أو venv
. بعد ذلك ، قم بتثبيت Falcon باستخدام pip
: pip install falcon
.
سنقوم بتطوير نموذج صغير لواجهة برمجة التطبيقات (API) والذي يقوم بالتلاعب في المناطق الزمنية الأساسية بالنسبة لنا. سيعرض الوقت الحالي بالتوقيت العالمي المنسق (UTC) ، بالإضافة إلى وقت الحقن المقابل. ولتحقيق هذه الغاية ، سنقوم بالاستيلاء على مكتبة أنيقة تسمى arrow
: pip install arrow
.
يمكنك العثور على العينة النهائية على https://github.com/rudimk/freecodecamp-guides-rest-api-falcon .
مصادر
فكر في مورد ككيان تحتاج إليه واجهة برمجة التطبيقات. في حالتنا ، سيكون أفضل مورد هو Timestamp
. عادةً ما يكون توجيهنا شيئًا كالتالي:
GET /timestamp
هنا ، GET
هو فعل HTTP المستخدم لاستدعاء نقطة النهاية هذه ، و /timestamp
هو عنوان URL نفسه. الآن بعد أن حصلنا على هذا الجزء من الطريق ، دعنا ننشئ وحدة نمطية!
$ touch timestamp.py
الوقت لاستيراد مكتبة الصقر:
`import json
import falcon
import arrow `
لاحظ أننا قمنا أيضًا باستيراد حزمة json
ومكتبة arrow
. الآن ، دعنا نحدد فئة لموردنا:
`class Timestamp(object):
def on_get(self, req, resp):
payload = {}
payload['utc'] = arrow.utcnow().format('YYYY-MM-DD HH:mm:SS')
payload['unix'] = arrow.utcnow().timestamp
resp.body = json.dumps(payload)
resp.status = falcon.HTTP_200
`
دعنا نذهب من خلال هذا المقتطف. لقد قمنا بتعريف فئة Timestamp
، on_get
أسلوب فئة يسمى on_get
- تخبر هذه الدالة Falcon أنه عندما يتم إصدار طلب GET
لنقطة نهاية لهذا المورد ، قم بتشغيل الوظيفة on_get
وقم بتوفير كائنات الطلب والاستجابة كمعلمات. بعد ذلك ، إنه الإبحار السلس - نقوم بإنشاء قاموس فارغ ، ونملأه بالطوابع الزمنية UTC و UNIX الحالية ، وتحويله إلى JSON وإرفاقه بكائن الاستجابة.
بسيطة جدا ، أليس كذلك؟ لكن للأسف ، هذا ليس كل شيء. نحتاج الآن إلى إنشاء خادم Falcon وربط فئة الموارد التي قمنا بتعريفها للتو إلى نقطة نهاية فعلية.
$ touch app.py
الآن ، أضف الرمز أدناه:
`import falcon
from timestamp import Timestamp
api = application = falcon.API()
timestamp = Timestamp()
api.add_route('/timestamp', timestamp) `
هنا ، قمنا بتعريف واجهة برمجة تطبيقات Falcon ، وقمنا بتهيئة مثيل لفئة الموارد التي أنشأناها في وقت سابق. بعد ذلك ، قمنا /timestamp
نقطة النهاية /timestamp
مع مثيل الفصل - والآن نحن جاهزون للنجاح! لاختبار هذا API تثبيت gunicorn
( pip install gunicorn
) ، وتشغيل gunicorn app
. استخدم Postman أو cURL
بسيط لاختبار ذلك:
$ curl http://localhost:8000/timestamp {"utc": "2017-10-20 06:03:14", "unix": 1508479437}
وهذا يفعل ذلك!
المضي قدما
وبمجرد حصولك على تعليق Falcon ، فإن إنشاء RESTful APIs القوية التي تتفاعل مع قواعد البيانات أو طوابير الرسائل سهل للغاية. تحقق من مستندات Falcon ، بالإضافة إلى PyPI للتعرف على وحدات Falcon المثيرة التي تستمر في الظهور.