NodeJS ve API Tasarım Temelleri

Post on 14-Jul-2015

384 views 3 download

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

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