Как да изградим RESTful API с Falcon

Въведение

RESTful API са основен компонент на всеки добре проектиран стек и Python има някои брилянтни рамки за бързо съставяне на API.

Една от тези рамки се нарича Falcon - и е страхотна! По същество микрорамка, тя се доставя със значителен брой предимства:

  1. Това е бързо. Наистина бързо. Вижте критериите тук.
  2. HTTP ресурсите се дефинират като класове, като методите на класовете се използват за различни REST операции на тези ресурси. Това помага да се поддържа чиста кодова база.
  3. Това е доста разширяемо - разгледайте този раздел в тяхната wiki, за да го усетите.
  4. Той се основава на WSGI - питоничният стандарт за уеб приложения - така че работи с Python 2.6, 2.7 и 3.3+. И ако имате нужда от повече производителност, стартирайте го с помощта на PyPy!

Приготвяме се да започнем

Първо, нека подготвим нашата среда. Лично тя винаги е страхотно да работа във виртуална среда - можете да използвате virtualenv, virtualenvwrapperили venv. На следващо място, инсталиране на Falcon използване pip: pip install falcon.

Ще разработим малък примерен API, който прави много основни манипулации в часови зони за нас. Той ще показва текущото време в UTC, както и съответното време на епохата. За тази цел, ние ще вземете един чудесен библиотека, наречена arrow: pip install arrow.

Можете да намерите готовата проба на //github.com/rudimk/freecodecamp-guides-rest-api-falcon.

Ресурси

Мислете за ресурс като за обект, който вашият API трябва да манипулира. В нашия случай най-добрият ресурс би бил a Timestamp. Нашето маршрутизиране обикновено би било нещо подобно:

GET /timestamp

Тук GETе HTTP глаголът, използван за извикване на тази крайна точка, и /timestampсамият URL адрес. Сега, след като отстранихме това малко, нека създадем модул!

$ touch timestamp.py

Време е да импортирате библиотеката Falcon:

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- тази функция казва на 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 API и инициализирахме екземпляр на класа ресурс, който създадохме по-рано. След това свързваме /timestampкрайната точка с екземпляра на класа - и сега сме готови ! За да тествате тази инсталация на API gunicorn( pip install gunicorn) и стартирайте gunicorn app. Използвайте пощальон или просто, за cURLда тествате това:

$ curl //localhost:8000/timestamp {"utc": "2017-10-20 06:03:14", "unix": 1508479437}

И това го прави!

Преместване на

След като се хванете за Falcon, съставянето на мощни RESTful API, които взаимодействат с бази данни или опашки за съобщения, е много лесно. Разгледайте Falcon документите, както и PyPI за интересни Falcon модули, които продължават да се появяват.