flask api tutorial with example extending flask with apis
Овај водич за Фласк АПИ објашњава популарна проширења Фласк-а попут Фласк твиттер Оембеддер, Фласк АПИ и Фласк РЕСТфул са примерима:
Оквир Фласк има прилично богат број проширења. Ова проширења су врло корисна и лако их је развити. Знамо да је оквир Фласк врло питонски и да има минималан скуп АПИ-ја и да је врло флексибилан, због чега је Фласк заједница створила толико проширења за многе специфичне задатке.
Као део Фласк туториал серије, овај туториал има пример неколико Фласк екстензија. Разговараћемо о следећим проширењима.
- Твиттер чутуре Оембеддер
- Фласк АПИ
- Чутура РЕСТфул
=> Посетите овде да бисте научили тиквицу од огреботина
Иако смо о многим екстензијама разговарали као о делу наших претходних водича, овај туторијал објашњава више са перспективом испитивања компоненти Фласк екстензије.
Шта ћете научити:
Шта је проширење чутуре
Проширење тиквице је инсталацијски Питхон модул или пакет који имплементира додатну функционалност апликације Фласк. Проширење Фласк може бити једноставно као оно које додаје подршку за коришћење спољног АПИ-ја као што је Твиттер за уграђивање твита на веб страницу.
Или, проширење Фласк може бити нови оквир као што је Фласк АПИ или Фласк-РЕСТфул за изградњу апликација које следе архитектонски образац или развојну парадигму.
Твиттер чутуре Оембеддер
У овом одељку узимамо пример постојећег једноставног пројекта отвореног кода из овде
Клонирајте овај пројекат у свој локални рачунар и инсталирајте га помоћу пипа уз помоћ доле поменуте команде.
# in an activated virtual environment pip install -e flask_twitter_oembedder/Ово проширење помаже у уграђивању Твеет-а уз помоћ ознаке Јиња2 предлошка. Међутим, да бисте користили ово проширење, мораћете да се пријавите за налог програмера на Твиттер-у. Једном када добијете налог програмера, направите апликацију и добићете кључеве и тајне за коришћење Твиттер-овог АПИ-ја.
бесплатни софтвер за копирање ДВД-а за Мац рачунаре
Кад добијете кључеве и тајне, чувајте их на сигурном месту како би апликација могла да им приступи. Задржали смо их у променљивим окружења и додали у конфигурацију апликације Фласк, као што је приказано доле. Наша демо апликација чува вредности конфигурације у датотеци цонфиг.пи.
# 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)Вредности тражених променљивих добијамо из променљивих околине. Ако одговарајућа вредност није присутна у променљивој околине, тада се она чува као Ништа.
Једном када додате горње редове у датотеку конфигурације, идите на __инит__.пи апликације Фласк и иницијализујте је тако што ћете је изменити, као што је приказано доле.
from flask_caching import Cache from flask_twitter_oembedder import TwitterOEmbedder cache = Cache(app, config={'CACHE_TYPE': 'simple'}) twitter_oembedder = TwitterOEmbedder(app, cache)Ови редови ће покренути проширење Фласк. Сада можемо да изменимо хелло.хтмл под шаблонима и додамо доле поменуту ознаку као што је приказано доле.
{{ oembed_tweet('1277228221394587649') }}Додали смо ову ознаку пре петље фор у постојећи образац. Та врло дугачка цифра је твеет ИД. Овај идентитет добијамо са УРЛ-а Твеет-а након твитовања. Након спремања датотеке шаблона, долазимо до крајње тачке / хелло / греетингс и примамо резултате, као што је приказано на доњој слици.

Чутура РЕСТфул
Наш пример примене Фласк РЕСТфул је онај који поштује ограничења РЕСТ архитектуре. Међутим, то није попут протокола, а програмери су флексибилни док имплементирају функције пратећи РЕСТ ограничења.
Молимо прочитајте више о ограничењима РЕСТ архитектуре овде .
Савремене веб апликације омогућавају клијентима да траже ресурсе на лако читљивим и стабилним крајњим тачкама на начин без држављанства.
Пример боце за одмарање
Применимо неке функције на РЕСТфул начин и у нашој примери апликације Фласк РЕСТфул.
Имамо начин чувања и послуживања података који се односе на албуме и песме. Применимо АПИ помоћу екстензије Фласк РЕСТфул.
Прво инсталирајте Фласк РЕСТфул помоћу наредбе у наставку.
pip install flask-restfulРади лакшег одржавања и разумевања, креирајмо датотеку под називом апи.пи унутар директорија апликације и у њој споменимо следеће редове кода. За сада размотрите АПИ-је сличне Фласк Виевсима.
Имплементираћемо функције које одговарају ХТТП глаголима да бисмо одговорили када клијент пошаље захтев на крајњу тачку сервера апликације.
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/')Створили смо два ресурса под називом Песме и Песме поткласирањем Резиме апстрактне класе Фласк-РЕСТфул. Предмет под називом Песме има две методе гет и пост које одговарају два ХТТП глагола; ГЕТ и ПОСТ, респективно.
Ресурс Песме служи свим песмама до регистроване крајње тачке када клијент то затражи и додаје песму на листу постојећих песама када су подаци постављени на истој крајњој тачки.
Слично томе, у случају класе Сонг, ХТТП ГЕТ, ДЕЛЕТЕ и ПУТ се примењују помоћу метода гет, делете и пут. Метода гет шаље одговор са траженом песмом као ЈСОН, метода делете уклања песму из СОНГС-а, а пут метода ажурира постојећу песму у СОНГС-у.
Хајде сада да додамо ове ресурсе нашој примеровој апликацији тако што ћемо их иницијализовати у датотеци __инит__.пи у фасцикли апликације.
from . import apiИнсталирајмо цурл и испробајмо функције на наведеним крајњим тачкама.
sudo apt -y install curlНабавите све песме
curl -k https://localhost:8080/api/v1/songsДобијамо одговор, као што је приказано у наставку.
{ 'songs': { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' } } }Сада употребимо доле поменуту команду за додавање песме.
curl -k -d 'title=Summer Days&singer=Martin Garrix' https://localhost:8080/api/v1/songsОдговор добијамо од нашег АПИ-ја, као што је приказано у наставку.
{ 'Song2': { 'title': 'Summer Days', 'singer': 'Martin Garrix2' } }Сада опет, ако упитамо листу песама као што смо то радили у претходној команди, и добићемо обе песме у одговору.
{ 'songs': { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' }, 'Song2': { 'title': 'Summer Days', 'singer': 'Martin Garrix2' } } }Слично томе, ХТТП ДЕЛЕТЕ и ПУТ раде како је предвиђено. Додајмо неколико тестова за верзију в1 овог једноставног АПИ-ја који смо креирали.
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Сада покрените ове тестове из командне линије, као што је приказано доле.
pytest app/tests/test_api.pyСлично томе, можемо да напишемо тестове за друге методе ради веће покривености.
Важно је напоменути да песме које смо додали остају као део јединственог процеса у којем је покренут развојни сервер. То значи да ће се сви нови подаци изгубити чим се процес искључи.
Штавише, задатак креирања верзије в1 АПИ-ја делује сувишно и разликује се од начина на који смо помоћу образаца и погледа чували податке у апликацији.
јава уклони елемент из низа
Обично имплементација АПИ-ја РЕСТфул захтева добијање података од клијената, марширање између крајева клијента и сервера и упорност уз помоћ модела база података које смо креирали.
Штавише, крајње тачке су осигуране за ненамерне и израђене улазе.
Због тога препоручујемо да се наведени примери користе само за учење концепата и ограничења РЕСТ архитектуре коришћењем ХТТП метода. Имајте на уму да је ово само један од многих начина стварања веб услуга. Штавише, постоји много начина на које се РЕСТ архитектура може применити.
Читаоце подстичемо да даље истраже како РЕСТ може имати различите формате датотека и прилагођене методе користећи друге протоколе, а не само ЈСОН и ХТТП. Да бисмо увидели само једну производну употребу, дајемо пример у наставку.
Користимо Фласк-Аппбуилдер БасеАпи за примену сличних карактеристика под различитим крајњим тачкама. Отворите датотеку апи.пи и ажурирајте је доленаведеним кодом.
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)Сада ћемо додати још неколико тестова за тестирање крајњих тачака које су направљене помоћу Фласк-Аппбуилдер-а. Ове тестове ћемо покренути користећи ПиТест.
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Фласк-Аппбуилдер такође помаже у пружању Сваггер корисничког интерфејса за листање и испробавање објављеног АПИ-ја. Отворите цонфиг.пи и ажурирајте га конфигурацијом приказаном доле.
FAB_API_SWAGGER_UI=TrueСада идите на хттпс: // лоцалхост: 8080 / сваггервиев / в1 и моћи ћете да видите приказ Сваггер како је приказано доле.

Хајде сада да креирамо АПИ-је за постојеће моделе база података које имамо. Морамо да користимо МоделАпи Фласк-Аппбуилдер-а.
Ажурирајте датотеку апи.пи следећим редовима кода.
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)Након дефинисања класе засноване на МоделРестАпи, поново је морамо регистровати код Фласк-Аппбуилдер помоћу методе адд_апи.
Сада дођите до корисничког интерфејса Сваггер као и раније и видећете референцу за АПИ сличну оној приказаној доле.

Можете испробати АПИ из приказа Сваггер или слањем увојка на крајње тачке као раније.
Фласк АПИ
Фласк АПИ је оквир који је прилично сличан Дјанго РЕСТ оквиру. Можете приступити Фласк АПИ документацији овде . То је падајућа замена за оквир Фласк.
Можемо одабрати било који од горе наведених примера да бисмо у нашу апликацију применили функције вођене АПИ-ом Фласк РЕСТ.
Хајде сада да зарежемо извор и објавимо промене у репо извору користећи Гит. Чим се обавежемо на исходиште са именом гране и пошаљемо захтев за повлачењем, јединични тестови ће се аутоматски покренути под Гит акцијама као део провера захтева за повлачењем.
Боца РестПлус
Фласк РестПлус је још једно проширење Фласк-а које помаже у стварању РЕСТ АПИ-ја помоћу Фласк-а. Овај пројекат је растављен у друго проширење названо Фласк-РЕСТКС и више се не одржава.
Овај пројекат има добру колекцију декоратера који описују АПИ-је и излаже своју документацију помоћу Сваггера. Можете погледати детаље овог пројекта овде .
Често постављана питања
П # 1) Како да направим РЕСТ АПИ помоћу Фласка?
Одговор: Фласк фрамеворк можемо користити са другим проширењима Фласк-а, као што су Фласк-РЕСТфул, Фласк АПИ, Фласк РЕСТКС, Цоннекион, итд. За стварање веб апликација заснованих на РЕСТ АПИ-ју. Већина проширења ради са осталим уграђеним карактеристикама Фласк фрамеворк-а и било којим другим постојећим ОРМ / библиотекама.
П # 2) Шта је пример РЕСТ АПИ?
Одговор: У овом упутству дат је пример апликације која имплементира РЕСТФул АПИ. Фласк-РЕСТфул је коришћен за креирање примера апликације. Прочитајте о одељку Фласк РЕСТфул у овом упутству.
П # 3) Чему служи РЕСТфул АПИ?
Одговор: Интерфејс за програмирање апликација који обично користи ХТТП захтеве и има одговарајуће позадинске методе за ХТТП глаголе као што су ГЕТ, ПОСТ, ПУТ, итд. Како би се омогућила комуникација између клијента и сервера, назива се РЕСТфул АПИ.
најбоља апликација за преузимање мп3 музике за андроид
Таква апликација следи принципе и ограничења РЕСТ архитектуре да би применила своје карактеристике.
Закључак
Појмове проширења Фласк покрили смо помоћу три проширења, као што су Фласк-твиттер-оембеддер, Фласк АПИ и Фласк-РЕСТфул.
Уз помоћ Фласк-твиттер-оембеддер, покрили смо и концепте Твиттер АПИ-ја. Генерално, такође смо укључили идеје о примени веб-услуге РЕСТфул, која следи принципе и ограничења архитектуре РЕСТфул.
У нашем следећем упутству покрићемо поређење између Дјанго-а и Фласк фрамеворк-а како бисмо читаоцима помогли да разумеју снаге и слабости оба оквира. Такође ће помоћи у одабиру једног оквира у односу на други на основу одређених пројектних захтева.
=> Овде истражите серију обука за једноставне тиквице
Препоручено читање
- Водич за тестирање АПИ-ја: Комплетан водич за почетнике
- Водич за АПИ за одмор: РЕСТ АПИ архитектура и ограничења
- Водич за Парасофт СОАтест: Алат за тестирање АПИ-ја без скрипти
- Како створити АПИ документацију у поштару?
- Водич за ГитХуб РЕСТ АПИ - Подршка за РЕСТ АПИ у ГитХуб-у
- Како се користи поштар за тестирање различитих формата АПИ-ја?
- Водич за ПОСТМАН: Испитивање АПИ-ја помоћу ПОСТМАН-а
- Топ 31 популарна питања за интервју са Питхон Фласк-ом са одговорима