88 lines
5.7 KiB
Markdown
88 lines
5.7 KiB
Markdown
---
|
|
title: REST APIs with Falcon
|
|
localeTitle: واجهات برمجة التطبيقات REST مع Falcon
|
|
---
|
|
## المقدمة
|
|
|
|
واجهات برمجة التطبيقات (REST) هي مكوّن رئيسي لأي رصة متقنة الصنع ، ويصادف أن بيثون تمتلك بعض أطر العمل اللامعة لتكوين واجهات برمجة التطبيقات بسرعة. واحد من هذه الأطر يسمى [الصقر](https://falconframework.org) - وهو رائع! إنه في الأساس عبارة عن هيكل مجهري ، وهو مزود بعدد كبير من المزايا:
|
|
|
|
1. إنه سريع سريع حقا. تحقق من المعايير [هنا](https://falconframework.org/#sectionBenchmarks) .
|
|
|
|
2. يتم تعريف موارد HTTP على أنها فئات ، مع استخدام أساليب الفئات لعمليات REST المختلفة على هذه الموارد. هذا يساعد على الحفاظ على مصدر برنامج نظيف.
|
|
|
|
3. انها قابلة للتوسع جدا - تحقق من [هذا القسم](https://github.com/falconry/falcon/wiki/Complementary-Packages) على الويكي الخاص بهم ، للحصول على الشعور به.
|
|
|
|
4. يعتمد على 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](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](https://falcon.readthedocs.io/en/stable/index.html) ، بالإضافة إلى PyPI للتعرف على وحدات Falcon المثيرة التي تستمر في الظهور. |