NodeJS ve API Tasarım Temelleri
-
Upload
hueseyin-babal -
Category
Software
-
view
384 -
download
3
Transcript of NodeJS ve API Tasarım Temelleri
NodeJS ve RESTful API
Tasarım Temelleri
Hüseyin BABAL
Full Stack DeveloperPHP, JAVA, NodeJS geliştiricisi.
Ölçeklenebilir ve gerçek zamanlı uygulama tasarımcısı.
Web Geliştirme Danışmanı.
Girişimci.
NodeJS eğitmeni.
GDG konferans konuşmacısı
@huseyinbabal @huseyinbabal http://huseyinbaba
l.net
Resource
URI
ResourcesHTTP Verbs
Representat
ions
Resource
Verisi olan bir
nesneBir URI ile
belirtilmişHTTP operasyonları
uygulanabilir
Collection(articles) Singleton(article)
/articles /articles/{articleI
d}
Sub-collections
/articles/{articleId}/comments
/articles/{articleId}/comments/{commentId} (Sub-
collection resource)
Http Verbs
Article Create
Article Update
Article Delete
URI HTTP
METHOD
DESCRIPTION
/articles GET Makaleleri listele
/articles POST Yeni makale oluştur
/articles/:id GET Makale detayını göster
/articles/:id DELETE Makaleyi sil
/articles/:id PUT Makaleyi komple güncelle
/articles/:id PATCH Makalenin belirli bir kısmını
güncelle
Representation
XML
JSON
Statistics
Resource URI
Unique Resource Identifier
Resource Seçimi
Uygulama alanını analiz et
İhityaçlarını tespit et
Kullanıcının anlayacağı şekilde seçim yap
Resource adı çoğul olsun
Bazen Resource adı Bulunamıyor
Mesela makaleyi aktif etmek için ne yapılabilir?
POST
/articles/:id/activate
...ya da
...
Ek örnek olarak “Arama” için tam olarak bir
Resource yoktur.
/search
Çok iyi dökümente etmek lazım
SSL
Dökümantasyon
Detaylı bilgi
Örnek
request/responseTest edilebilir Curl
sorguları
Fine Grained Resource (Tane tane)
Önce makale detayını gönder
Sonra makale etiket ve kategorileri gir
En son olarak da email gönder
Kullanıc bunu nerden bilecek?
Coarse Grained Resource (Toplu)
Tek seferde bütün makale detaylarını gönder
İş Mantığının Kullanıcı Tarafında
olması
İlk önce makale içeriğini gir
Sonra kategori bilgisini gönder
Kullanıcı kategori bilgisini göndermezse
ne olacak?
Bir aksiyonun birde fazla Resource
etkilemesi
Aksiyon-X = ∱(Resource-A, Resource-B,
Resource-C)
=
Aksiyon-X, Resource-X şeklinde gösterilebilir
Örnek
Para Transfer Olayı => Para, Müşteri Hesabı
Para Transfer Olayı, Para Transfer Log
Resource olarak gösterilebilir
Ekstra Operasyonlar
CRUD operasyonların haricinde;
- sıralama
- sayfalama
- filtreleme
- arama
gibi işlemler için url parametresi kullanablirsiniz
Sıralama
/articles?sort=-created_at,rank
Filtreleme
/articles?activated=true
Arama
/articles?q=NodeJS
Sayfalama
/articles?page=2&limit=25
Birlikte Kullanımı
/articles?q=NodeJS&sort=-created_at&limit=20
Response Nasıl Olmalı?
PUT, POST, PATCH için 201 dönüp, dönen
makalenin urlsini Location Header içine
koyabilirsiniz
Resource Alan Adları
snake_case alan adları camelCase alan
adlarından %20 daha iyi okunaklı.
http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
Response prettyprint olsun ama gerektiğinde
gzip yapılabilsin
KB
Pretty 3.2X
Ugly 3X
Pretty & Gzip 1.25X
Ugly & Gzip 1X
Response Formatı
{
result: “Makale oluşturuldu”
}
Başarılı Sonuç
Hatalı Sonuç
Belirli formata sahip sonuç formatı yerine
dinamik ve genişleyebilen json formatı
kullanmak daha iyidir
Ama JSONP servisi veriyorsanız envelop tarzı
olabilir
Versiyonlama
http://article.com/api/v3.0/articles/123 (Bad)
URL içinde versiyon
kullanmayın
… Onun yerine
GET /articles/123
Accept:
application/vnd.huseyinbabal.blogging.article-
v3+json
Versiyon bilgisini header içinde
yollayın
Daha da kötüsü
http://yourdomain.com/api/v3.0/articles/v2.5/co
mments/v1.7/likes
Versiyonlama Mimarisi
Sunucu bazlı versiyon
Aynı sunucuda farklı versiyon
Sunucu Bazlı Versiyon
v1v2
v1
v1
Accept-
Version:v1
Accept-
Version:v2
Aynı Sunucu Farklı Versiyon
v1,
v2 v1,
v2
v1,
v2
v1,
v2
Accept-
Version:v1
Accept-
Version:v2
Farklı yaklaşım
Yeni versiyon çıkınca blog ya da emailing
yoluyla haberdar et
Rate Limiting
X-Rate-Limit-Limit => Toplam sorgu limiti (t
periyodundan)X-Rate-Limit-Remaining => Kalan Toplam sorgu limiti (t
periyodundan)X-Rate-Limit-Reset => Kaç saniye sonra bloklanacak (t
periyodundan)
ETag ve Last-Modified
ETag => MD5(response)
Last-Modified => En son güncelleme
Kimlik Doğrulama
Session, Cookie yok
Header içinde token yollanılmalı
NodeJS Örnek RESTful API
https://github.com/huseyinbabal/nodes-restful-
api