2. Kto som
● Vladimír Gorej
● backend vývoj aukčného produktu pre
spoločnost CodeScale s.r.o.
Technology stack:
● python
● django
● postgresql
● tastypie framework
3. Django rest frameworky
● tastypie vs django-rest-framework
Tastypie +
● lepšie spracovaná dokumentácia
● sexi API
● RESTful Service Best Practices v 1.1
compliance
4. RESTful
GET - čítanie
POST - vytvorenie nového resourcu
PUT - update existujúceho resourcu
PATCH - partial update
DELETE - mazanie resourcov
Podpora BULK operácii v jednom requeste.
5. Resource
Resource = kolekcia príbuzných dát
Class based resource implementácia
● Resource
● ModelResource
ModelResource = RESTful wrapper nad django
modelami.
6. Auth system
● Authentication
Verifikuje o koho ide a validuje jeho prístup k
API. Viacero implementácii out-of-the-box.
● Authorization
Verifikuje čo môže api consumer s resourcom
robiť. Viacero implementácii out-of-the-box.
7. Validácia
1. Dedením triedy Validation a implementácii
metódy is_valid()
2. FormValidation - implementácia validácie do
klasickej django form
8. Serializácia
● Serializery riadia to, ako sú data
prezentované consumerovi API
● Defaultne k dizpozícii: json, jsonp, xml, yaml,
html, plist
● Možnosť jednoduchej implemtácie vlastného
formátu
● Api consumer si môže sám zvoliť v akom
formáte chce/potrebuje komunikovať
9. Caching, Throttling, Hooks
● Možnosť cachovať na strane API
● 2 hotové implementácie - NoCache,
SimpleCache (CACHE_BACKEND)
Throttling = limiting consumerových requestov
Hooks = možné zasahovať kedykoľvek do
processingu request/response cyklu, zmenu url
schémy, parent-child resourcy...
10. Putting it all together
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'auth/users'
filtering = {
'email': ALL
}
excludes = ['password']
authentication = ApiConsumerAuthentication()
authorization = DjangoAuthorization()
validation = FormValidation(form_class=MyUserForm)
serialize = Serializer(['json', 'xml'])
throttle = CacheThrottle(throttle_at=100, timeframe=3600)
cache = SimpleCache(timeout=10)