SlideShare ist ein Scribd-Unternehmen logo
1 von 50
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ısı. 
Web Geliştirme Danışmanı. 
Girişimci. 
NodeJS eğitmeni. 
GDG konferans konuşmacısı 
@huseyinbabal @huseyinbabal http://huseyinbaba 
l.net
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 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ı
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 
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 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 
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.blogging.article-v3+ 
json
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 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

Weitere ähnliche Inhalte

Ähnlich wie NodeJS ve API Tasarım Temelleri

Asp.net mvc ve jquery ile sunucudan json verisi okuma
Asp.net mvc ve jquery ile sunucudan json verisi okumaAsp.net mvc ve jquery ile sunucudan json verisi okuma
Asp.net mvc ve jquery ile sunucudan json verisi okumaerdemergin
 
Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010Evren Ayan
 
Php egitim-cd-si
Php egitim-cd-siPhp egitim-cd-si
Php egitim-cd-sisersld89
 
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)İbrahim ATAY
 
Php kursu-adana
Php kursu-adanaPhp kursu-adana
Php kursu-adanasersld88
 
Neden Backbone.js'ten AngularJS'e Geçtik?
Neden Backbone.js'ten AngularJS'e Geçtik?Neden Backbone.js'ten AngularJS'e Geçtik?
Neden Backbone.js'ten AngularJS'e Geçtik?Omer Buyukoglu
 
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017Serhat Dirik
 
ASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişSinan Bozkuş
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaHüseyin Mert
 
Php ornegi
Php ornegiPhp ornegi
Php ornegisersld89
 
Php kursu-beykoz
Php kursu-beykozPhp kursu-beykoz
Php kursu-beykozsersld88
 
Temel HTML Etiketleri ve Kullanım Örnekleri
Temel HTML Etiketleri ve Kullanım ÖrnekleriTemel HTML Etiketleri ve Kullanım Örnekleri
Temel HTML Etiketleri ve Kullanım Örneklericmkandemir
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 
Php kursu-kartal
Php kursu-kartalPhp kursu-kartal
Php kursu-kartalsersld88
 

Ähnlich wie NodeJS ve API Tasarım Temelleri (20)

Asp.net mvc ve jquery ile sunucudan json verisi okuma
Asp.net mvc ve jquery ile sunucudan json verisi okumaAsp.net mvc ve jquery ile sunucudan json verisi okuma
Asp.net mvc ve jquery ile sunucudan json verisi okuma
 
Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010
 
Php egitim-cd-si
Php egitim-cd-siPhp egitim-cd-si
Php egitim-cd-si
 
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
 
MongoDB Overview
MongoDB OverviewMongoDB Overview
MongoDB Overview
 
Php kursu-adana
Php kursu-adanaPhp kursu-adana
Php kursu-adana
 
Neden Backbone.js'ten AngularJS'e Geçtik?
Neden Backbone.js'ten AngularJS'e Geçtik?Neden Backbone.js'ten AngularJS'e Geçtik?
Neden Backbone.js'ten AngularJS'e Geçtik?
 
Php odevi
Php odeviPhp odevi
Php odevi
 
sunu (Asp-2)
sunu (Asp-2)sunu (Asp-2)
sunu (Asp-2)
 
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
 
Php ornek
Php ornekPhp ornek
Php ornek
 
ASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a Geçiş
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
 
NoSQL Sunumu
NoSQL SunumuNoSQL Sunumu
NoSQL Sunumu
 
Php ornegi
Php ornegiPhp ornegi
Php ornegi
 
Php kursu-beykoz
Php kursu-beykozPhp kursu-beykoz
Php kursu-beykoz
 
Temel HTML Etiketleri ve Kullanım Örnekleri
Temel HTML Etiketleri ve Kullanım ÖrnekleriTemel HTML Etiketleri ve Kullanım Örnekleri
Temel HTML Etiketleri ve Kullanım Örnekleri
 
No SQL & MongoDB Nedir?
No SQL & MongoDB Nedir?No SQL & MongoDB Nedir?
No SQL & MongoDB Nedir?
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
Php kursu-kartal
Php kursu-kartalPhp kursu-kartal
Php kursu-kartal
 

Mehr von Hüseyin BABAL

Infinite Scalable Systems with Docker
Infinite Scalable Systems with DockerInfinite Scalable Systems with Docker
Infinite Scalable Systems with DockerHüseyin BABAL
 
MongoDB GeoSpatial Feature
MongoDB GeoSpatial FeatureMongoDB GeoSpatial Feature
MongoDB GeoSpatial FeatureHüseyin BABAL
 
RESTful API Design Fundamentals
RESTful API Design FundamentalsRESTful API Design Fundamentals
RESTful API Design FundamentalsHüseyin BABAL
 
Token Based Authentication Systems with AngularJS & NodeJS
Token Based Authentication Systems with AngularJS & NodeJSToken Based Authentication Systems with AngularJS & NodeJS
Token Based Authentication Systems with AngularJS & NodeJSHüseyin BABAL
 
Token Based Authentication Systems
Token Based Authentication SystemsToken Based Authentication Systems
Token Based Authentication SystemsHüseyin BABAL
 
Make Your Application Social
Make Your Application SocialMake Your Application Social
Make Your Application SocialHüseyin BABAL
 
Realtime web applications with ExpressJS and SocketIO
Realtime web applications with ExpressJS and SocketIORealtime web applications with ExpressJS and SocketIO
Realtime web applications with ExpressJS and SocketIOHüseyin BABAL
 
Complete MVC on NodeJS
Complete MVC on NodeJSComplete MVC on NodeJS
Complete MVC on NodeJSHüseyin BABAL
 

Mehr von Hüseyin BABAL (8)

Infinite Scalable Systems with Docker
Infinite Scalable Systems with DockerInfinite Scalable Systems with Docker
Infinite Scalable Systems with Docker
 
MongoDB GeoSpatial Feature
MongoDB GeoSpatial FeatureMongoDB GeoSpatial Feature
MongoDB GeoSpatial Feature
 
RESTful API Design Fundamentals
RESTful API Design FundamentalsRESTful API Design Fundamentals
RESTful API Design Fundamentals
 
Token Based Authentication Systems with AngularJS & NodeJS
Token Based Authentication Systems with AngularJS & NodeJSToken Based Authentication Systems with AngularJS & NodeJS
Token Based Authentication Systems with AngularJS & NodeJS
 
Token Based Authentication Systems
Token Based Authentication SystemsToken Based Authentication Systems
Token Based Authentication Systems
 
Make Your Application Social
Make Your Application SocialMake Your Application Social
Make Your Application Social
 
Realtime web applications with ExpressJS and SocketIO
Realtime web applications with ExpressJS and SocketIORealtime web applications with ExpressJS and SocketIO
Realtime web applications with ExpressJS and SocketIO
 
Complete MVC on NodeJS
Complete MVC on NodeJSComplete MVC on NodeJS
Complete MVC on NodeJS
 

NodeJS ve API Tasarım Temelleri