flask api tutorial with example extending flask with apis
Tento výučbový program Flask API vysvetľuje populárne rozšírenia Flask ako Flask twitter Oembedder, Flask API a Flask RESTful s príkladmi:
Flask framework má dosť veľké množstvo rozšírení. Tieto rozšírenia sú veľmi užitočné a dajú sa ľahko vyvinúť. Vieme, že rámec Flask je veľmi pythonický, má minimálnu sadu rozhraní API a je veľmi flexibilný, a preto komunita Flask vytvorila toľko rozšírení pre mnoho konkrétnych úloh.
Ako súčasť série tutoriálov o banke obsahuje tento tutoriál príklad niekoľkých rozšírení o banke. Budeme diskutovať o nasledujúcich rozšíreniach.
- Fľaštičkový twitter Oembedder
- Flask API
- Baňa RESTful
=> Navštívte tu a naučíte sa banku od nuly
Aj keď sme v rámci našich predchádzajúcich tutoriálov diskutovali o mnohých rozšíreniach, tento tutoriál vysvetľuje viac s ohľadom na preskúmanie komponentov rozšírenia Flask.
Čo sa dozviete:
Čo je rozšírenie banky
Flask extension je inštalovateľný modul Python alebo balík, ktorý implementuje ďalšie funkcie do aplikácie Flask. Rozšírenie Flask môže byť rovnako jednoduché ako rozšírenie, ktoré pridáva podporu konzumácie externého rozhrania API, ako je napríklad Twitter, na vloženie tweetu na webovú stránku.
Alebo rozšírenie Flask môže predstavovať nový rámec, napríklad Flask API alebo Flask-RESTful na vytváranie aplikácií, ktoré sa riadia architektonickým vzorom alebo vývojovou paradigmou.
Fľaštičkový twitter Oembedder
V tejto časti si vezmeme príklad existujúceho jednoduchého projektu typu open-source z tu
Klonujte tento projekt do svojho lokálneho počítača a nainštalujte ho pomocou pipu pomocou nižšie uvedeného príkazu.
# in an activated virtual environment pip install -e flask_twitter_oembedder/
Toto rozšírenie pomáha pri vkladaní tweetu pomocou značky šablóny Jinja2. Ak však chcete použiť toto rozšírenie, budete musieť požiadať o účet vývojára na Twitteri. Len čo získate účet vývojára, vytvorte si aplikáciu a získate kľúče a tajomstvá na využitie rozhrania API spoločnosti Twitter.
najlepšie operačné systémy všetkých čias
Keď budete mať kľúče a tajomstvá, uložte ich na bezpečnom mieste, aby k nim mala aplikácia prístup. Ponechali sme ich v premenných prostredia a pridali sme ich do konfigurácie aplikácie Flask, ako je uvedené nižšie. Naša ukážková aplikácia uchováva hodnoty konfigurácie v súbore config.py.
# Twitter details import os TWITTER_ACCESS_TOKEN = os.environ.get('TWITTER_ACCESS_TOKEN', None) TWITTER_TOKEN_SECRET = os.environ.get('TWITTER_TOKEN_SECRET', None) TWITTER_CONSUMER_KEY = os.environ.get('TWITTER_CONSUMER_KEY', None) TWITTER_CONSUMER_SECRET = os.environ.get('TWITTER_CONSUMER_SECRET', None)
Hodnoty požadovaných premenných získame z premenných prostredia. Ak zodpovedajúca hodnota nie je v premennej prostredia, potom sa uloží ako žiadna.
Po pridaní vyššie uvedených riadkov do konfiguračného súboru prejdite do aplikácie __init__.py aplikácie Flask a inicializujte ju úpravou, ako je uvedené nižšie.
from flask_caching import Cache from flask_twitter_oembedder import TwitterOEmbedder cache = Cache(app, config={'CACHE_TYPE': 'simple'}) twitter_oembedder = TwitterOEmbedder(app, cache)
Tieto riadky inicializujú rozšírenie Flask. Teraz môžeme upraviť hello.html pod šablónami a pridať nižšie uvedenú značku, ako je uvedené nižšie.
{{ oembed_tweet('1277228221394587649') }}
Túto značku sme pridali pred slučku for v existujúcej šablóne. Táto veľmi dlhá číslica je tweet id. Toto ID získame z tweetovej adresy URL po tweete. Po uložení súboru šablóny prejdeme do koncového bodu / hello / greetings a dostaneme výsledky, ako je znázornené na nasledujúcom obrázku.
Baňa RESTful
Naša príkladná aplikácia Flask RESTful rešpektuje obmedzenia architektúry REST. Nie je to však ako protokol a vývojári sú pri implementácii funkcií flexibilní a riadia sa obmedzeniami REST.
Prečítajte si viac informácií o obmedzeniach architektúry REST tu .
Moderné webové aplikácie umožňujú klientom požadovať zdroje v ľahko čitateľných a stabilných koncových bodoch bez štátnej príslušnosti.
Flaskový RESTful príklad
Implementujme niektoré funkcie RESTful spôsobom aj v našej ukážkovej aplikácii Flask RESTful.
Máme spôsob ukladania a poskytovania údajov týkajúcich sa albumov a piesní. Poďme implementovať API pomocou rozšírenia Flask RESTful.
Najskôr pomocou nasledujúceho príkazu nainštalujte Flask RESTful.
pip install flask-restful
Pre ľahkú údržbu a pochopenie vytvorme súbor s názvom api.py v adresári aplikácie a spomenieme v ňom nasledujúce riadky kódu. Zvážte zatiaľ API podobné funkciám Flask Views.
Chystáme sa implementovať funkcie zodpovedajúce slovesám HTTP, aby sme odpovedali, keď klient pošle požiadavku na koncový bod aplikácie servera.
from flask import request from flask_restful import Resource, reqparse, abort, Api from . import app api = Api(app, prefix='/myapi/v1') def abort_if_song_doesnt_exist(song_name): if song_name not in SONGS: abort(404, message='Song {} doesn't exist'.format(song_name)) parser = reqparse.RequestParser() parser.add_argument('title') parser.add_argument('singer') SONGS = { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' } } class Songs(Resource): def get(self): return {'songs': SONGS} def post(self): args = parser.parse_args(strict=True) song_name = int(max(SONGS.keys()).lstrip('Song')) + 1 song_name = 'Song%d' % song_name SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return { song_name:SONGS(song_name) }, 201 api.add_resource(Songs, '/songs') class Song(Resource): def get(self, song_name): abort_if_song_doesnt_exist(song_name) return { song_name: SONGS(song_name) } def delete(self, song_name): abort_if_song_doesnt_exist(song_name) del SONGS(song_name) return '', 204 def put(self, song_name): args = parser.parse_args(strict=True) abort_if_song_doesnt_exist(song_name) SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return { song_name: SONGS(song_name) }, 201 api.add_resource(Song, '/songs/')
Vytvorili sme dva zdroje, ktoré sa nazývajú Piesne a pieseň, a to podtriedou triedy abstraktných zdrojov Flask-RESTful. Trieda s názvom Songs má dve metódy get a post zodpovedajúce dvom HTTP slovesám; GET a POST.
Zdroj Skladby poskytuje všetky skladby registrovanému koncovému bodu, keď o to Klient požiada, a pridá pieseň do zoznamu existujúcich skladieb, keď sa údaje zverejnia v rovnakom koncovom bode.
Podobne sú v prípade triedy Song implementované HTTP GET, DELETE a PUT pomocou metód get, delete a put. Metóda get odošle odpoveď s požadovanou skladbou ako JSON, metóda delete odstráni skladbu z PIESNIK a metóda put aktualizuje existujúcu skladbu v PÍSNIACH.
Teraz pridajme tieto zdroje do našej vzorovej aplikácie ich inicializáciou v súbore __init__.py v priečinku aplikácie.
from . import api
Poďme si nainštalovať zvlnenie a vyskúšame funkcie v uvedených koncových bodoch.
sudo apt -y install curl
Získajte všetky skladby
dobrá aplikácia na stiahnutie mp3 pre Android
curl -k https://localhost:8080/api/v1/songs
Dostaneme odpoveď, ako je uvedené nižšie.
{ 'songs': { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' } } }
Teraz pridajme skladbu pomocou nižšie uvedeného príkazu.
curl -k -d 'title=Summer Days&singer=Martin Garrix' https://localhost:8080/api/v1/songs
Odpoveď dostaneme z nášho rozhrania API, ako je uvedené nižšie.
{ 'Song2': { 'title': 'Summer Days', 'singer': 'Martin Garrix2' } }
Opäť, ak zadáme dotaz na zoznam skladieb, ako sme to robili v predchádzajúcom príkaze, dostaneme obe piesne v odpovedi.
{ 'songs': { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' }, 'Song2': { 'title': 'Summer Days', 'singer': 'Martin Garrix2' } } }
Podobne fungujú HTTP DELETE a PUT podľa plánu. Pridajme niekoľko testov na verziu v1 tohto jednoduchého rozhrania API, ktoré sme vytvorili.
def test_myapi_v1_songs(client): resp = client.get('/api/v1/songs/') #import pdb;pdb.set_trace() assert 200 == resp.status_code def test_myapi_v1_add_song(client): ''' The application can store the same data multiple times''' data = { 'title': 'Summer Days', 'singer': 'Martin Garrix' } resp = client.post( '/api/v1/songs/', data=data ) assert 201 == resp.status_code
Teraz spustite tieto testy z príkazového riadku, ako je uvedené nižšie.
pytest app/tests/test_api.py
Podobne môžeme pre väčšie pokrytie napísať testy aj na iné metódy.
Je dôležité poznamenať, že skladby, ktoré sme pridali, pretrvávajú ako súčasť jediného procesu, v ktorom beží vývojový server. To znamená, že všetky nové údaje sa stratia, akonáhle sa proces vypne.
Úloha vytvoriť verziu v1 API sa navyše javí ako nadbytočná a líši sa od toho, ako sme ukladali údaje v aplikácii pomocou formulárov a pohľadov.
Implementácia RESTful API zvyčajne vyžaduje získavanie údajov od klientov, zhromažďovanie údajov medzi klientom a serverom a vytrvalosť pomocou databázových modelov, ktoré sme vytvorili.
Koncové body sú navyše zabezpečené proti nechceným a vytvoreným vstupom.
Preto odporúčame, aby vyššie uvedené príklady slúžili iba na osvojenie si konceptov a obmedzení architektúry REST pomocou metód HTTP. Pamätajte, že toto je iba jeden z mnohých spôsobov vytvárania webových služieb. Okrem toho existuje veľa spôsobov, ako je možné implementovať architektúru REST.
Odporúčame čitateľom, aby ďalej preskúmali, ako môže mať REST rôzne formáty súborov a vlastné metódy pomocou iných protokolov, nielen pomocou JSON a HTTP. Nižšie uvádzame príklad, ktorý poskytuje prehľad o jednom výrobnom použití.
Na implementáciu podobných funkcií v rôznych koncových bodoch používame Flask-Appbuilder BaseApi. Otvorte súbor api.py a aktualizujte ho pomocou nižšie uvedeného kódu.
APIs using appbuilder from flask_appbuilder.api import BaseApi, expose from . import appbuilder class SongsApi(BaseApi): resource_name = 'songs' @expose('/', methods=('POST', 'GET')) def songs(self): if request.method == 'GET': return self.response(200, songs=SONGS) else: args = parser.parse_args(strict=True) song_name = int(max(SONGS.keys()).lstrip('Song')) + 1 song_name = 'Song%d' % song_name SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return self.response(201, song=SONGS(song_name)) appbuilder.add_api(SongsApi) class SongApi(BaseApi): resource_name = 'songs' @expose('/', methods=('GET', 'DELETE', 'PUT')) def song(self, song_name): if request.method == 'GET': abort_if_song_doesnt_exist(song_name) return self.response(200, song_name=SONGS(song_name) ) elif request.method == 'DELETE': abort_if_song_doesnt_exist(song_name) del SONGS(song_name) return self.response(204, message='OK') elif request.method == 'PUT': args = parser.parse_args(strict=True) abort_if_song_doesnt_exist(song_name) SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return self.response(201, song_name=SONGS(song_name)) else: self.response_404() appbuilder.add_api(SongApi)
Teraz pridajme ďalšie testy na testovanie koncových bodov vytvorených pomocou nástroja Flask-Appbuilder. Tieto testy spustíme pomocou PyTestu.
def test_v1_songs(client): resp = client.get('/api/v1/songs/', follow_redirects=True) #import pdb;pdb.set_trace() assert 200 == resp.status_code def test_v1_add_song(client): ''' The application can store the same data multiple times''' # Get the existing number of songs resp = client.get('/api/v1/songs/', follow_redirects=True) data = { 'title': 'Summer Days', 'singer': 'Martin Garrix' } resp = client.post( '/api/v1/songs/', data=data, follow_redirects=True ) assert 201 == resp.status_code
Aplikácia Flask-Appbuilder tiež pomáha pri poskytovaní používateľského rozhrania Swagger na zoznam a vyskúšanie zverejneného rozhrania API. Otvorte súbor config.py a aktualizujte ho o konfiguráciu uvedenú nižšie.
FAB_API_SWAGGER_UI=True
Teraz prejdite na https: // localhost: 8080 / swaggerview / v1 a budete môcť vidieť zobrazenie Swagger, ako je zobrazené nižšie.
Teraz poďme vytvoriť API pre existujúce databázové modely, ktoré máme. Musíme použiť ModelApi nástroja Flask-Appbuilder.
Aktualizujte súbor api.py nasledujúcimi riadkami kódu.
from flask_appbuilder.models.sqla.interface import SQLAInterface from flask_appbuilder.api import ModelRestApi from .models import Song as SongModel class MySongModelApi(ModelRestApi): resource_name = 'newsongs' datamodel = SQLAInterface(SongModel) appbuilder.add_api(MySongModelApi)
Po definovaní triedy založenej na ModelRestApi ju opäť musíme zaregistrovať v nástroji Flask-Appbuilder pomocou metódy add_api.
Teraz prejdite na používateľské rozhranie Swagger ako predtým a uvidíte odkaz na API podobný tomu, ktorý je uvedený nižšie.
Môžete vyskúšať API z pohľadu Swagger alebo zaslaním zvlnenia do koncových bodov ako predtým.
Flask API
Flask API je rámec, ktorý je dosť podobný rámcu Django REST. Môžete získať prístup k dokumentácii Flask API tu . Je to náhradná náhrada za rámec Flask.
Môžeme si vybrať ktorýkoľvek z vyššie uvedených príkladov na implementáciu funkcií riadených rozhraním Flask REST API do našej aplikácie.
Teraz poďme potvrdiť zdroj a zverejniť zmeny pôvodného repo pomocou Gitu. Hneď ako sa zaviažeme k pôvodu s názvom pobočky a pošleme žiadosť o načítanie, v rámci akcií Git sa v rámci kontrol žiadosti o načítanie automaticky spustia testy jednotky.
Fľaša RestPlus
Flask RestPlus je ďalšie rozšírenie Flask, ktoré pomáha pri vytváraní REST API pomocou Flask. Tento projekt bol rozdelený na ďalšie rozšírenie s názvom Flask-RESTX a už nie je udržiavaný.
Tento projekt má dobrú zbierku dekoratérov na opis API a vystavuje svoju dokumentáciu pomocou nástroja Swagger. Môžete skontrolovať podrobnosti tohto projektu tu .
často kladené otázky
Otázka č. 1) Ako vytvorím rozhranie REST API s bankou?
Odpoveď: Flask framework môžeme použiť s ďalšími rozšíreniami Flask ako Flask-RESTful, Flask API, Flask RESTX, Connexion atď., Aby sme vytvorili webové aplikácie založené na REST API. Väčšina rozšírení pracuje s ďalšími vstavanými funkciami rámca Flask a akýchkoľvek ďalších existujúcich ORM / knižníc.
Otázka 2) Čo je príklad rozhrania REST API?
Odpoveď: V tomto výučbe je uvedená príklad aplikácie, ktorá implementuje rozhranie RESTFul API. Na vytvorenie vzorovej aplikácie sa použil program Flask-RESTful. Prečítajte si o časti príkladu Flask RESTful v tomto výučbe.
Otázka 3) Na čo slúži RESTful API?
Odpoveď: Rozhranie aplikačného programovania, ktoré všeobecne používa požiadavky HTTP a má zodpovedajúce backendové metódy pre slovesá HTTP, ako napríklad GET, POST, PUT atď., Aby umožňovali komunikáciu medzi klientom a serverom, sa nazýva RESTful API.
ako naplánovať príspevky na instagrame zadarmo
Takáto aplikácia dodržiava princípy a obmedzenia architektúry REST na implementáciu svojich funkcií.
Záver
Koncepty rozšírení Flask sme pokryli pomocou troch rozšírení, ako sú Flask-twitter-oembedder, Flask API a Flask-RESTful.
S pomocou Flask-twitter-oembedder sme pokryli aj pojmy Twitter API. Všeobecne sme zahrnuli aj nápady implementácie webovej služby RESTful, ktorá sa riadi princípmi a obmedzeniami architektúry REST.
V našom ďalšom tutoriále sa budeme venovať porovnaniu medzi Django a Flask frameworkom, aby sme našim čitateľom pomohli pochopiť silné a slabé stránky oboch frameworkov. Pomôže tiež pri výbere jedného rámca proti druhému na základe konkrétnych požiadaviek projektu.
=> Preskúmajte tu sériu školení Simple Flask
Odporúčané čítanie
- Výukový program pre testovanie API: Kompletný sprievodca pre začiatočníkov
- Výukový program Rest API: REST API Architecture and Constraints
- Výukový program Parasoft SOAtest: Bezskriptový testovací nástroj API
- Ako vytvoriť dokumentáciu API v službe Postman?
- Výukový program REST API pre GitHub - Podpora REST API v GitHube
- Ako používať Postman na testovanie rôznych formátov API?
- Výukový program POSTMAN: Testovanie API pomocou programu POSTMAN
- Top 31 populárnych otázok na rozhovor s pythonovskou bankou s odpoveďami