- Konu sahibi
- #1
REST API, kaynaklar ve bunların temsilleri üzerinden iletişim kuran REST mimari ilkelerine göre tasarlanmış uygulama arayüzüdür. Web üzerinde yaygın uygulaması HTTP kullanır ve kullanıcı, ürün veya sipariş gibi kaynakları URL'lerle tanımlar. İstemci; kullanıcı, ürün veya sipariş gibi bir kaynağa istek gönderir, sunucu da genellikle JSON biçiminde veri ve HTTP durum koduyla yanıt verir. REST bir programlama dili veya veri biçimi değildir; istemci-sunucu ayrımı, durumsuz iletişim, önbellek kuralları ve ortak arayüz gibi kısıtları olan bir mimari stildir. JSON zorunlu değildir.
İstemci ile sunucu arasındaki iletişim istek-cevap modeline dayanır. İstekte hedef adres, HTTP yöntemi, başlıklar ve gerekiyorsa gövde bulunur. Sunucu isteği doğrular, yetkilendirmeyi kontrol eder, işlemi gerçekleştirir ve sonucu bir durum koduyla döndürür.
Bir görev uygulaması geliştirdiğinizi varsayalım. Görevleri listelemek için istemci şu isteği gönderebilir:
Sunucu başarılı bir yanıtta
Yeni görev eklemek için istek gövdesi gönderilir. Aşağıdaki gösterim, ilgili başlıklar ve JSON gövdesiyle sınırlı şematik bir örnektir:
İşlem başarılıysa sunucu genellikle oluşturulan kaynağı ve
Kaynak, yalnız bir veri türü değil; tanımlanabilen bir kullanıcı, koleksiyon, belge veya hizmet kavramı olabilir. İstemci çoğunlukla kaynağın kendisiyle değil, JSON veya başka biçimdeki temsiliyle çalışır. Örneğin kullanıcılar için
Bu yöntemlerin anlamını karıştırmamak önemlidir. Örnekte yeni kullanıcı eklemek için
Durumsuz iletişim, her isteğin anlaşılması için gereken bağlamı taşımasıdır; sunucunun kullanıcı veya sipariş verisi saklayamayacağı anlamına gelmez. Yanıtların önbelleğe uygun olup olmadığı belirtilir; her yanıtın önbelleğe alınması gerekmez. Katmanlı yapı ise istemcinin bir geçit veya ara sunucu üzerinden çalışabilmesine izin verir.
Tam REST yaklaşımında ortak arayüz; kaynak kimliği, temsiller, kendini açıklayan mesajlar ve sonraki işlemleri bağlantılarla sunan hipermedya denetimlerini de kapsar. Aşağıdaki örnekler temel HTTP kullanımını gösterir; tek başına bir API'nin bütün REST kısıtlarını karşıladığını kanıtlamaz.
REST API'yi yalnızca JSON döndüren her servis sanmak yaygın bir hatadır. JSON biçimi tek başına REST anlamına gelmez; kaynakların tutarlı modellenmesi ve HTTP semantiğinin doğru kullanılması da gerekir. Her işlem için
Bir başka hata, hassas bilgileri URL sorgu parametrelerine koymaktır. URL'ler günlüklerde veya tarayıcı geçmişinde görülebileceğinden parolalar ve erişim belirteçleri burada taşınmamalıdır. Ayrıca istemcinin gönderebileceği alanlar doğrulanmalı, yalnızca arayüzde gizlemek güvenlik önlemi sayılmamalıdır.
REST mimari stildir; SOAP ise XML tabanlı bir mesajlaşma çerçevesi/protokolüdür ve farklı taşıma protokolleriyle kullanılabilir. REST'in HTTP üzerindeki yaygın uygulamasıyla SOAP'ı yalnız “biri JSON, diğeri XML” diye ayırmak eksik kalır. Seçim mevcut entegrasyon sözleşmesine ve gereksinimlere bağlıdır.
Hayır. REST tasarım yaklaşımı, taşıma şifrelemesinden ayrıdır. Web API'sini HTTPS ile sunmak gerekir; ayrıca kimlik doğrulama, kaynak bazında yetki kontrolü ve giriş doğrulaması uygulanmalıdır. HTTPS de tek başına bu uygulama kontrollerinin yerini tutmaz.
REST API nasıl çalışır?
İstemci ile sunucu arasındaki iletişim istek-cevap modeline dayanır. İstekte hedef adres, HTTP yöntemi, başlıklar ve gerekiyorsa gövde bulunur. Sunucu isteği doğrular, yetkilendirmeyi kontrol eder, işlemi gerçekleştirir ve sonucu bir durum koduyla döndürür.
Somut REST API örneği
Bir görev uygulaması geliştirdiğinizi varsayalım. Görevleri listelemek için istemci şu isteği gönderebilir:
HTTP:
GET /tasks HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer TOKEN
Sunucu başarılı bir yanıtta
200 OK durum kodu ve aşağıdakine benzer bir JSON döndürebilir:
JSON:
{
"data": [
{"id": 1, "title": "Dokümantasyonu yaz", "completed": false}
]
}
Yeni görev eklemek için istek gövdesi gönderilir. Aşağıdaki gösterim, ilgili başlıklar ve JSON gövdesiyle sınırlı şematik bir örnektir:
HTTP:
POST /tasks HTTP/1.1
Host: example.com
Content-Type: application/json
{"title":"Yedekleme planını hazırla"}
İşlem başarılıysa sunucu genellikle oluşturulan kaynağı ve
201 Created durum kodunu döndürür. Kaynak bulunamazsa 404 Not Found, istek verisi hatalıysa 400 Bad Request, kimlik doğrulama eksik veya geçersizse 401 Unauthorized kullanılabilir. Durum kodu, istemcinin sonucu nasıl ele alacağını belirlemesine yardımcı olur.Kaynaklar ve HTTP yöntemleri
Kaynak, yalnız bir veri türü değil; tanımlanabilen bir kullanıcı, koleksiyon, belge veya hizmet kavramı olabilir. İstemci çoğunlukla kaynağın kendisiyle değil, JSON veya başka biçimdeki temsiliyle çalışır. Örneğin kullanıcılar için
/users, belirli bir kullanıcı için /users/42 kullanılabilir. Kaynağın ne yapılacağını ise HTTP yöntemi belirtir:| Yöntem | Yaygın kullanım | Örnek |
|---|---|---|
| GET | Veri okuma | GET /users/42 |
| POST | Yeni kaynak oluşturma | POST /users |
| PUT | Hedefte temsil oluşturma veya bütünüyle değiştirme | PUT /users/42 |
| PATCH | Kaynağın bir bölümünü güncelleme | PATCH /users/42 |
| DELETE | Kaynak silme | DELETE /users/42 |
GET kullanılmaz; koleksiyona POST gönderilir. API sözleşmesi izin veriyorsa bilinen bir hedef URL'de PUT da kaynak oluşturabilir. Yalnızca e-posta adresini değiştirmek için PATCH uygunken, kaynağın tüm alanlarını yeni içerikle değiştirmek için PUT tercih edilir.REST ilkelerini tasarıma aktarma
Durumsuz iletişim, her isteğin anlaşılması için gereken bağlamı taşımasıdır; sunucunun kullanıcı veya sipariş verisi saklayamayacağı anlamına gelmez. Yanıtların önbelleğe uygun olup olmadığı belirtilir; her yanıtın önbelleğe alınması gerekmez. Katmanlı yapı ise istemcinin bir geçit veya ara sunucu üzerinden çalışabilmesine izin verir.
Tam REST yaklaşımında ortak arayüz; kaynak kimliği, temsiller, kendini açıklayan mesajlar ve sonraki işlemleri bağlantılarla sunan hipermedya denetimlerini de kapsar. Aşağıdaki örnekler temel HTTP kullanımını gösterir; tek başına bir API'nin bütün REST kısıtlarını karşıladığını kanıtlamaz.
REST API tasarlarken uygulanabilir kararlar
- Kaynakları isimlerle ve tutarlı URL'lerle tanımlayın.
/getTasksgibi eylem merkezli adresler yerine/taskskullanın. - İşlemin amacını HTTP yöntemiyle ifade edin; URL'ye gereksiz şekilde
/createveya/deleteeklemeyin. - İstek ve yanıt biçimini açıkça belirleyin. JSON kullanıyorsanız
Content-Type: application/jsonbaşlığını doğru yönetin. - Başarılı ve hatalı sonuçlar için anlamlı HTTP durum kodları döndürün. Hata yanıtlarında istemcinin düzeltebileceği alanları açıklayın.
- Kimlik doğrulama ve yetkilendirmeyi ayırın. Kullanıcının kim olduğu ile belirli kaynağa erişip erişemeyeceği aynı kontrol değildir.
- Listeleme uç noktalarında filtreleme, sıralama ve sayfalama kurallarını baştan belirleyin; yanıt biçimini sonradan değiştirmek istemci uyumluluğunu bozabilir.
Sık yapılan hatalar
REST API'yi yalnızca JSON döndüren her servis sanmak yaygın bir hatadır. JSON biçimi tek başına REST anlamına gelmez; kaynakların tutarlı modellenmesi ve HTTP semantiğinin doğru kullanılması da gerekir. Her işlem için
200 OK döndürmek de hatalı tasarıma yol açabilir; istemcinin oluşturma, doğrulama, yetki ve sunucu hatalarını ayırt edebilmesi gerekir.Bir başka hata, hassas bilgileri URL sorgu parametrelerine koymaktır. URL'ler günlüklerde veya tarayıcı geçmişinde görülebileceğinden parolalar ve erişim belirteçleri burada taşınmamalıdır. Ayrıca istemcinin gönderebileceği alanlar doğrulanmalı, yalnızca arayüzde gizlemek güvenlik önlemi sayılmamalıdır.
Sık sorulan sorular
REST API ile SOAP arasındaki temel fark nedir?
REST mimari stildir; SOAP ise XML tabanlı bir mesajlaşma çerçevesi/protokolüdür ve farklı taşıma protokolleriyle kullanılabilir. REST'in HTTP üzerindeki yaygın uygulamasıyla SOAP'ı yalnız “biri JSON, diğeri XML” diye ayırmak eksik kalır. Seçim mevcut entegrasyon sözleşmesine ve gereksinimlere bağlıdır.
REST API kullanmak bağlantıyı otomatik olarak şifreler mi?
Hayır. REST tasarım yaklaşımı, taşıma şifrelemesinden ayrıdır. Web API'sini HTTPS ile sunmak gerekir; ayrıca kimlik doğrulama, kaynak bazında yetki kontrolü ve giriş doğrulaması uygulanmalıdır. HTTPS de tek başına bu uygulama kontrollerinin yerini tutmaz.