Frameworky pro tvorbu RESTful API #4 – Django REST framework (python)
Vtomto článku se podíváme na Django. Jedná se o open source webový aplikační framework napsaný v Pythonu, který se volně drží architektury model-view-controller. Django byl navržen tak, aby umožňoval vývojářům co nejrychlejší dokončení aplikace z jejího návrhu. Také je vysoce zaměřen na bezpečnost a pomáhá vývojářům vyhnout se spoustě známých bezpečnostních chyb. V případě tvorby RESTful API aplikací se podíváme na jeho konkrétní specializovaný modul – Django REST framework.
http://www.django-rest-framework.org/
Principy technologie
Ani v tomto frameworku nebude výjimkou použitá model-view-controller architektura. K zprovoznění frameworku je potřeba mít nainstalovaný Python a základní Django framework, jejich zprovoznění je opět snazší v Linuxových prostředích. Můžeme pracovat i ve Windows, bude však nutné instalovat další dodatečný software.
V Djangu můžeme vytvořit více aplikací najednou a následně je sloučit do jedné aplikace. Základní Django projekt můžeme vytvořit jednoduše, příkazem:
django-admin startproject djangorest
Výše zmíněný příkaz nám vytvoří balíček s několika Python soubory. Pro tuto ukázku přeskočíme některé další příkazy pro samotné zprovoznění základů frameworku a podíváme se rovnou na tvorbu modelu. Model bude, jak by se dalo očekávat, Python třída articles/models.py:
class Article(models.Model):
title = models.TextField()
content = models.TextField()
Předpokládejme, že připojení na databázi už máme plně vyřešené a funkční. Django nám pak k tomuto modelu může snadno vytvořit migrace, které pak aktualizují tyto modely do databáze:
python manage.py makemigrations articles
python manage.py migrate
V tomto frameworku se však navíc musíme zabývat serializací, což je z pohledu architektury v podstatě vrstva view. Serializer je tedy Python třída starající se o převod z nějakého serializovaného formátu (např JSON) do Python objektů a opačně. Jejich kód pro tuto ukázku není příliš zajímavý. Uvažujme, že máme klasický JSON serializer pro články, tedy ArticleSerializer. S tímto serializerem by se pak pracovalo v controller vrstvě následovně:
"""
List all articles.
"""
if request.method == 'GET':
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return JsonResponse(serializer.data, safe=False)
Podmínka (viz výše) by pak umožňovala vrácení všech článků v JSON formátu v případě GET requestu. Vidíme, že je zde opět velice snadný přístup ke všem objektům z databáze, podobně jako tomu bylo u frameworku Rails.
Co je na frameworku trochu zvláštní, je také způsob routování HTTP požadavků, stará se o to speciální Python soubor, v našem případě articles/urls.py, za pomocí url patternů (vzorů):
urlpatterns = [
url(r'^articles/$', views.article_list),
url(r'^articles/(?P0-9+)/$', views.article_detail),
]
Celkově se framework nejvíce podobá předchozímu frameworku Rails. Práce s ním mi však přijde trochu složitější, avšak Python může nabídnout o něco vyšší spolehlivost (hlavně z rychlostního hlediska) než Ruby. K užitku také bude spoustu dodatečných balíčků pro jazyk Python.
Hlavní výhody
- Generování kódu Rychlé a snadné generování projektů, migrací pomáhá k celkovému zrychlení prací na projektu.
- Přístup ke kolekcím Snadný přístup ke kolekcím do databáze.
- ZabezpečeníVysoké zaměření na bezpečnost, pomáhá vývojářům vyhnout se spoustě známých bezpečnostních chyb.
Hlavní nevýhody
- Windows O něco horší podpora pro Windows, nutnost instalace velkého množství dodatečného software.
- Přehlednost Opět jistá nepřehlednost vygenerovaných projektů.
- Serializace Nutnost explicitně řešit serializace Python objektů. Dle mého názoru je to trochu zbytečná práce navíc, ve všech předchozích frameworcích nebylo potřeba.
Celkové zhodnocení
1 – nejlepší, 5 – nejhorší
- Jednoduchost a intuitivnost – 3 Sice obsahuje generování kódu, které by práci mělo značně zjednodušit, avšak například oproti Rails frameworku mi přijde značně složitější, jelikož řešíme další požadavky jako je serializace Python objektů.
- Dokumentace – 2 Dobrá dokumentace jak samotného Djanga, tak modulu Django REST framework.
- Spolehlivost – 1 Poskytuje vysoké možnosti zabezpečení, Python je poslední dobou stále populárnější a je považován za velice spolehlivý jazyk.
- Popularita – 2 Popularita frameworku je značně vysoká, v poslední době již překročila dříve dominantí Rails framework, který je teď na sestupu, avšak popularita Java – Spring roste stále rychleji.
Mezi další populární technologie pro jazyk Python lze řadit:
- Bottle – http://bottlepy.org/
- Flask – http://flask.pocoo.org/
- Falcon – http://falconframework.org/
- a další..