Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
NodeJS ve RESTful API 
Tasarım Temelleri
Hüseyin BABAL 
Full Stack Developer 
PHP, JAVA, NodeJS geliştiricisi. 
Ölçeklenebilir ve gerçek zamanlı uygulama tasarımcı...
Resource 
URI 
Representat 
ions 
HTTP Verbs Resources
Resource 
Verisi olan bir 
nBeirs UneRI ile 
bHeTliTrtPilm oipşerasyonları 
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 Mak...
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 ...
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 
rTeeqsut eesdt/ilreebsiplior nCsuerl 
sorguları
Fine Grained Resource (Tane tane) 
Önce makale detayını gönder 
Sonra makale etiket ve kategorileri gir 
En son olarak da ...
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...
Ö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 ur...
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/~jm...
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 servi...
Versiyonlama 
URL içinde versiyon 
kullanmayın 
http://article.com/api/v3.0/articles/123 (Bad)
… Onun yerine 
Versiyon bilgisini header içinde 
yollayın 
GET /articles/123 
Accept: 
application/vnd.huseyinbabal.bloggi...
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 
v1 
v2 
v1 
v1 
Accept- 
Version:v1 
Accept- 
Version:v2
Aynı Sunucu Farklı Versiyon 
v1, 
v2 v1, 
v2 
v1, 
v2 
v1, 
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 l...
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
NodeJS ve API Tasarım Temelleri
Upcoming SlideShare
Loading in …5
×

1

Share

Download to read offline

NodeJS ve API Tasarım Temelleri

Download to read offline

NodeJS ve API Tasarım Temelleri

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

NodeJS ve API Tasarım Temelleri

  1. 1. NodeJS ve RESTful API Tasarım Temelleri
  2. 2. Hüseyin BABAL Full Stack Developer PHP, 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
  3. 3. Resource URI Representat ions HTTP Verbs Resources
  4. 4. Resource Verisi olan bir nBeirs UneRI ile bHeTliTrtPilm oipşerasyonları uygulanabilir
  5. 5. Collection(articles) Singleton(article) /articles /articles/{articleI d}
  6. 6. Sub-collections /articles/{articleId}/comments /articles/{articleId}/comments/{commentId} (Sub-collection resource)
  7. 7. Http Verbs Article Create Article Update Article Delete
  8. 8. 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ı
  9. 9. Representation XML JSON Statistics
  10. 10. Resource URI Unique Resource Identifier
  11. 11. 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
  12. 12. Bazen Resource adı Bulunamıyor Mesela makaleyi aktif etmek için ne yapılabilir? POST /articles/:id/activate
  13. 13. ...ya da
  14. 14. ... Ek örnek olarak “Arama” için tam olarak bir Resource yoktur. /search Çok iyi dökümente etmek lazım
  15. 15. SSL
  16. 16. Dökümantasyon Detaylı bilgi Örnek rTeeqsut eesdt/ilreebsiplior nCsuerl sorguları
  17. 17. Fine Grained Resource (Tane tane) Önce makale detayını gönder Sonra makale etiket ve kategorileri gir En son olarak da email gönder
  18. 18. Kullanıc bunu nerden bilecek?
  19. 19. Coarse Grained Resource (Toplu) Tek seferde bütün makale detaylarını gönder
  20. 20. İş Mantığının Kullanıcı Tarafında olması İlk önce makale içeriğini gir Sonra kategori bilgisini gönder
  21. 21. Kullanıcı kategori bilgisini göndermezse ne olacak?
  22. 22. Bir aksiyonun birde fazla Resource etkilemesi Aksiyon-X = ∱(Resource-A, Resource-B, Resource-C) = Aksiyon-X, Resource-X şeklinde gösterilebilir
  23. 23. Örnek Para Transfer Olayı => Para, Müşteri Hesabı Para Transfer Olayı, Para Transfer Log Resource olarak gösterilebilir
  24. 24. Ekstra Operasyonlar CRUD operasyonların haricinde; - sıralama - sayfalama - filtreleme - arama gibi işlemler için url parametresi kullanablirsiniz
  25. 25. Sıralama /articles?sort=-created_at,rank
  26. 26. Filtreleme /articles?activated=true
  27. 27. Arama /articles?q=NodeJS
  28. 28. Sayfalama /articles?page=2&limit=25
  29. 29. Birlikte Kullanımı /articles?q=NodeJS&sort=-created_at&limit=20
  30. 30. Response Nasıl Olmalı? PUT, POST, PATCH için 201 dönüp, dönen makalenin urlsini Location Header içine koyabilirsiniz
  31. 31. 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
  32. 32. Response prettyprint olsun ama gerektiğinde gzip yapılabilsin
  33. 33. KB Pretty 3.2X Ugly 3X Pretty & Gzip 1.25X Ugly & Gzip 1X
  34. 34. Response Formatı { result: “Makale oluşturuldu” }
  35. 35. Başarılı Sonuç
  36. 36. Hatalı Sonuç
  37. 37. Belirli formata sahip sonuç formatı yerine dinamik ve genişleyebilen json formatı kullanmak daha iyidir Ama JSONP servisi veriyorsanız envelop tarzı olabilir
  38. 38. Versiyonlama URL içinde versiyon kullanmayın http://article.com/api/v3.0/articles/123 (Bad)
  39. 39. … Onun yerine Versiyon bilgisini header içinde yollayın GET /articles/123 Accept: application/vnd.huseyinbabal.blogging.article-v3+ json
  40. 40. Daha da kötüsü http://yourdomain.com/api/v3.0/articles/v2.5/co mments/v1.7/likes
  41. 41. Versiyonlama Mimarisi Sunucu bazlı versiyon Aynı sunucuda farklı versiyon
  42. 42. Sunucu Bazlı Versiyon v1 v2 v1 v1 Accept- Version:v1 Accept- Version:v2
  43. 43. Aynı Sunucu Farklı Versiyon v1, v2 v1, v2 v1, v2 v1, Accept- Version:v1 Accept- Version:v2
  44. 44. Farklı yaklaşım
  45. 45. Yeni versiyon çıkınca blog ya da emailing yoluyla haberdar et
  46. 46. 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)
  47. 47. ETag ve Last-Modified ETag => MD5(response) Last-Modified => En son güncelleme
  48. 48. Kimlik Doğrulama Session, Cookie yok Header içinde token yollanılmalı
  49. 49. NodeJS Örnek RESTful API https://github.com/huseyinbabal/nodes-restful-api
  • UmutIIK

    Dec. 6, 2014

NodeJS ve API Tasarım Temelleri

Views

Total views

1,379

On Slideshare

0

From embeds

0

Number of embeds

84

Actions

Downloads

12

Shares

0

Comments

0

Likes

1

×