Introducere

API-urile RESTful sunt o componentă majoră a oricărei stive bine arhitecturate, iar Python are câteva cadre geniale pentru compunerea rapidă a API-urilor.

Unul dintre aceste cadre se numește Şoim – și este minunat! În esență, un microframe, este livrat cu un număr considerabil de avantaje:

  1. E rapid. Foarte rapid. Verificați criteriile de referință Aici.
  2. Resursele HTTP sunt definite ca clase, metodele de clasă fiind utilizate pentru diferite operațiuni REST pe aceste resurse. Acest lucru ajută la menținerea unei baze de cod curate.
  3. Este destul de extensibil – verificați aceasta sectiune pe wiki-ul lor, pentru a-și da seama.
  4. Se bazează pe WSGI – standardul Pythonic pentru aplicațiile web – deci funcționează cu Python 2.6, 2.7 și 3.3+. Și dacă aveți nevoie de mai multă performanță, rulați-o folosind PyPy!

Noțiuni de bază

În primul rând, să ne pregătim mediul. Personal, este întotdeauna minunat să lucrezi în medii virtuale – poți folosi virtualenv, virtualenvwrapper sau venv. Apoi, instalați Falcon folosind pip: pip install falcon.

Vom dezvolta un mic eșantion de API care face manipulări de bază pentru fusul orar pentru noi. Va afișa ora curentă în UTC, precum și ora de epocă corespunzătoare. În acest scop, vom apuca o bibliotecă inteligentă numită arrow: pip install arrow.

Puteți găsi proba terminată la https://github.com/rudimk/freecodecamp-guides-rest-api-falcon.

ad-banner

Resurse

Gândiți-vă la o resursă ca la o entitate pe care API-ul dvs. trebuie să o manipuleze. În cazul nostru, cea mai bună resursă ar fi o Timestamp. Rutarea noastră ar fi de obicei așa:

GET /timestamp

Aici, GET este verbul HTTP folosit pentru a apela acest punct final și /timestamp este adresa URL în sine. Acum, că am scăpat acest pic din drum, să creăm un modul!

$ touch timestamp.py

Este timpul să importați biblioteca Falcon:

import json

import falcon

import arrow

Rețineți că am importat și fișierul json pachet și arrow bibliotecă. Acum, să definim o clasă pentru resursa noastră:

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

Să trecem prin acest fragment. Am definit un Timestamp class și a definit o metodă de clasă numită on_get – această funcție îi spune Falcon că atunci când a GET cererea este emisă către un punct final pentru această resursă, rulați on_get funcționează și furnizează obiectele de cerere și răspuns ca parametri.

După aceea, navigarea este lină – creăm un dicționar gol, îl completăm cu marcajele temporale UTC și UNIX, îl convertim în JSON și îl atașăm la obiectul de răspuns.

Destul de simplu, nu? Dar, din păcate, asta nu este tot. Acum trebuie să creăm un server Falcon și să conectăm clasa de resurse pe care tocmai am definit-o la un punct final final.

$ touch app.py

Acum, adăugați codul de mai jos:

import falcon

from timestamp import Timestamp

api = application = falcon.API()

timestamp = Timestamp()

api.add_route('/timestamp', timestamp)

Aici, am definit un API Falcon și am inițializat o instanță a clasei de resurse pe care am creat-o anterior. Apoi, am conectat /timestamp punctul final cu instanța clasei – și acum suntem bine să plecăm! Pentru a testa această instalare API gunicorn(pip install gunicorn), și fugi gunicorn app. Utilizați Postman sau simplu cURL pentru a testa acest lucru:

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

Și asta o face!

Trecând peste

Odată ce ați obținut Falcon, este foarte ușor să compuneți API-uri RESTful puternice care interacționează cu baze de date sau cu cozile de mesagerie. Verificați Falcon docs, precum și PyPI pentru module Falcon interesante care continuă să apară.