NodeJS ve API Tasarım Temelleri

50
NodeJS ve RESTful API Tasarım Temelleri

Transcript of NodeJS ve API Tasarım Temelleri

Page 1: NodeJS ve API Tasarım Temelleri

NodeJS ve RESTful API

Tasarım Temelleri

Page 2: NodeJS ve 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

Page 3: NodeJS ve API Tasarım Temelleri

Resource

URI

ResourcesHTTP Verbs

Representat

ions

Page 4: NodeJS ve API Tasarım Temelleri

Resource

Verisi olan bir

nesneBir URI ile

belirtilmişHTTP operasyonları

uygulanabilir

Page 5: NodeJS ve API Tasarım Temelleri

Collection(articles) Singleton(article)

/articles /articles/{articleI

d}

Page 6: NodeJS ve API Tasarım Temelleri

Sub-collections

/articles/{articleId}/comments

/articles/{articleId}/comments/{commentId} (Sub-

collection resource)

Page 7: NodeJS ve API Tasarım Temelleri

Http Verbs

Article Create

Article Update

Article Delete

Page 8: NodeJS ve API Tasarım Temelleri

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

Page 10: NodeJS ve API Tasarım Temelleri

Resource URI

Unique Resource Identifier

Page 11: NodeJS ve API Tasarım Temelleri

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

Page 12: NodeJS ve API Tasarım Temelleri
Page 13: NodeJS ve API Tasarım Temelleri

Bazen Resource adı Bulunamıyor

Mesela makaleyi aktif etmek için ne yapılabilir?

POST

/articles/:id/activate

Page 14: NodeJS ve API Tasarım Temelleri

...ya da

Page 15: NodeJS ve API Tasarım Temelleri

...

Ek örnek olarak “Arama” için tam olarak bir

Resource yoktur.

/search

Çok iyi dökümente etmek lazım

Page 16: NodeJS ve API Tasarım Temelleri

SSL

Page 17: NodeJS ve API Tasarım Temelleri

Dökümantasyon

Detaylı bilgi

Örnek

request/responseTest edilebilir Curl

sorguları

Page 18: NodeJS ve API Tasarım Temelleri

Fine Grained Resource (Tane tane)

Önce makale detayını gönder

Sonra makale etiket ve kategorileri gir

En son olarak da email gönder

Page 19: NodeJS ve API Tasarım Temelleri

Kullanıc bunu nerden bilecek?

Page 20: NodeJS ve API Tasarım Temelleri

Coarse Grained Resource (Toplu)

Tek seferde bütün makale detaylarını gönder

Page 21: NodeJS ve API Tasarım Temelleri

İş Mantığının Kullanıcı Tarafında

olması

İlk önce makale içeriğini gir

Sonra kategori bilgisini gönder

Page 22: NodeJS ve API Tasarım Temelleri

Kullanıcı kategori bilgisini göndermezse

ne olacak?

Page 23: NodeJS ve API Tasarım Temelleri

Bir aksiyonun birde fazla Resource

etkilemesi

Aksiyon-X = ∱(Resource-A, Resource-B,

Resource-C)

=

Aksiyon-X, Resource-X şeklinde gösterilebilir

Page 24: NodeJS ve API Tasarım Temelleri

Örnek

Para Transfer Olayı => Para, Müşteri Hesabı

Para Transfer Olayı, Para Transfer Log

Resource olarak gösterilebilir

Page 25: NodeJS ve API Tasarım Temelleri

Ekstra Operasyonlar

CRUD operasyonların haricinde;

- sıralama

- sayfalama

- filtreleme

- arama

gibi işlemler için url parametresi kullanablirsiniz

Page 26: NodeJS ve API Tasarım Temelleri

Sıralama

/articles?sort=-created_at,rank

Page 27: NodeJS ve API Tasarım Temelleri

Filtreleme

/articles?activated=true

Page 28: NodeJS ve API Tasarım Temelleri

Arama

/articles?q=NodeJS

Page 29: NodeJS ve API Tasarım Temelleri

Sayfalama

/articles?page=2&limit=25

Page 30: NodeJS ve API Tasarım Temelleri

Birlikte Kullanımı

/articles?q=NodeJS&sort=-created_at&limit=20

Page 31: NodeJS ve API Tasarım Temelleri

Response Nasıl Olmalı?

PUT, POST, PATCH için 201 dönüp, dönen

makalenin urlsini Location Header içine

koyabilirsiniz

Page 32: NodeJS ve API Tasarım Temelleri

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

Page 33: NodeJS ve API Tasarım Temelleri

Response prettyprint olsun ama gerektiğinde

gzip yapılabilsin

Page 34: NodeJS ve API Tasarım Temelleri

KB

Pretty 3.2X

Ugly 3X

Pretty & Gzip 1.25X

Ugly & Gzip 1X

Page 35: NodeJS ve API Tasarım Temelleri

Response Formatı

{

result: “Makale oluşturuldu”

}

Page 36: NodeJS ve API Tasarım Temelleri

Başarılı Sonuç

Page 37: NodeJS ve API Tasarım Temelleri

Hatalı Sonuç

Page 38: NodeJS ve API Tasarım Temelleri

Belirli formata sahip sonuç formatı yerine

dinamik ve genişleyebilen json formatı

kullanmak daha iyidir

Ama JSONP servisi veriyorsanız envelop tarzı

olabilir

Page 39: NodeJS ve API Tasarım Temelleri

Versiyonlama

http://article.com/api/v3.0/articles/123 (Bad)

URL içinde versiyon

kullanmayın

Page 40: NodeJS ve API Tasarım Temelleri

… Onun yerine

GET /articles/123

Accept:

application/vnd.huseyinbabal.blogging.article-

v3+json

Versiyon bilgisini header içinde

yollayın

Page 41: NodeJS ve API Tasarım Temelleri

Daha da kötüsü

http://yourdomain.com/api/v3.0/articles/v2.5/co

mments/v1.7/likes

Page 42: NodeJS ve API Tasarım Temelleri

Versiyonlama Mimarisi

Sunucu bazlı versiyon

Aynı sunucuda farklı versiyon

Page 43: NodeJS ve API Tasarım Temelleri

Sunucu Bazlı Versiyon

v1v2

v1

v1

Accept-

Version:v1

Accept-

Version:v2

Page 44: NodeJS ve API Tasarım Temelleri

Aynı Sunucu Farklı Versiyon

v1,

v2 v1,

v2

v1,

v2

v1,

v2

Accept-

Version:v1

Accept-

Version:v2

Page 45: NodeJS ve API Tasarım Temelleri

Farklı yaklaşım

Page 46: NodeJS ve API Tasarım Temelleri

Yeni versiyon çıkınca blog ya da emailing

yoluyla haberdar et

Page 47: NodeJS ve API Tasarım Temelleri

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)

Page 48: NodeJS ve API Tasarım Temelleri

ETag ve Last-Modified

ETag => MD5(response)

Last-Modified => En son güncelleme

Page 49: NodeJS ve API Tasarım Temelleri

Kimlik Doğrulama

Session, Cookie yok

Header içinde token yollanılmalı

Page 50: NodeJS ve API Tasarım Temelleri

NodeJS Örnek RESTful API

https://github.com/huseyinbabal/nodes-restful-

api