obenplus.com | oben+ | Hikayesi bol bir yazılımcının kaleminden, teknoloji dünyasını en önemli ve en ince ayrıntısına kadar takip etmek, bir yazılımcının hayatını, yaşantısını gözlemlemek isteneyenler için...

REST API Nedir ? Nasıl Kullanılır ?

Merhaba arkadaşlar,

Uzun zamandır teknik bir yazı paylaşmamıştım, bu sene daha sık paylaşımda bulunmayı düşünüyorum. Günümüzün popüler konularından birisiyle 2015 yılının ilk yazısına başlıyorum. Konumuz REST Api nedir ?

Bu yazıyı REST sözcüğünü ilginç bulup okuyanlar için önce API nedir den başlayalım 🙂 Api, Application Programming Interface kelimelerinin baş harflerinden oluşan bir kısaltmadırapi Bir uygulamanın bir takım fonksiyonlarının başka uygulamalar tarafından kullanılmasına olanak sağladığı yapıya API diyoruz özetle.

Günümüzde iki sistemin haberleşmesinde kullanılan trend olmuş iki tip servis haberleşmesi var. Bir tanesi SOAP ve diğeri de REST. Ben çok kısa, SOAP dan da bahsedeceğim, REST ile arasındaki farkları anlamak açısından.

SOAP dediğimiz arkadaşımızın Simple Object Access Protocol – Basit Nesne Erişim Protokolü isminde uzunca bir ismi var. SOAP web servis çağrılarında Remote Procedure Call (RPC) modelini kullanan, istemci/sunucu mantığına dayalı bir protokoldür. Daha da özet hali, bir servis var ve bunun metodları var, siz de bu metodları call ederek response alıyorsunuz. SOAP da request / response süreci tümüyle XML olarak iletilmektedir.

Örnek SOAP servis;

axqSol tarafta iki örnek SOAP servis metodu görüyorsunuz. Bir tanesi getLastVersion, diğeri de getSozlesme metodu. Mantık ise oldukça basit, getLastVersion metodunu hiç bir input vermeyerek çağırdığınızda, uygulama size bir element dönüyor, bu element in tipi string ve unique bir değer.

SOAP servisleri denemek istiyorsanız, SOAP UI isimli toolu şiddetle öneririm. Oldukça kullanışlı olan bu tool ile servisimizi deneyecek olursak;

 

 

Request;

Response;

Şeklinde olmaktadır. Görüldüğü üzere bütün veriler XML olarak gidip gelmektedir. Bu da SOAP ın artık old-fashioned olması için geçerli bir sebep aslında.

Gördüğünüz gibi psikolojik olarak SOAP ın insanda verdiği hissiyat, bir sürü text ama anlaşılır bir yapı gibi. Eğer siz de öyle düşünüyorsanız, REST i korkmadan algılamaya çalışırsanız, ön yargılarınızı yıkarsanız, daha simple birşey olduğunu anlayacaksınız.

REST (Representational state transfer) Nedir ?

  1. REST client-server iletişimiyle ilgili bir mimari.
  2. SOAP, RPC gibi kompleks mimarilerle sağlamak yerine, HTTP protokolü üzerinden saglamak.
  3. SOAP, RPC’nin aksine basit ve hafiftirler.
  4. Esnek olup, SOAP gibi keskin standartları yoktur.
  5. SOAP ile en büyük farkı, SOAP gibi bizi proxy kullanmaya, bir WSDL’e zorlamıyor olması.
  6. Entegre etmesi kolay.

Yukarıdaki maddelerin üzerinden tek tek geçmekte fayda var. İlk maddemiz ve ikinci maddemizi ortak düşünelim. Ortada bir client, bir server var, bu client aslında sadece POST, GET, PUT, DELETE vb. gibi bir kaç kelimeyi biliyor ve HTTP üzerinden haberleşme yapılıyor. Ne kadar simple olduğunu gelin siz düşünün 🙂

Standartı yoktur REST’in. Yani kafanıza estiği gibi bir mapping mimarisi uydurabilirsiniz. (Tabi saçma olmaması lazım) Özetle method call gibi değil, adeta bir ağaç mantığıyla api call yapabiliyorsunuz.

PROXY yok, WSDL yok, XML ile uğraşmak yok. Request yap html üzerinden, al responsu JSON üzerinden, bu kadar basit 🙂

REST Request Tipleri:
  • GET : Belirtilen collection’ın URI’lerini veya detaylarını listelemede kullanılır.
  • PUT: Bütün bir collection’ı başka bir collection’la yer değiştirmek için kullanılır.
  • POST: Yeni bir collection oluşturmak için kullanılır ve yeni oluşturulan collection’ın URI’si döndürülür.
  • DELETE: Tüm Collection’ı silmek için kullanılır.
REST Apilerde Dönülen HTTP Status Kodları (Yaygın Kullanılanlar)

200 OK: Genelde veri listeleme sonuçları 200 ile dönüş yapılır.
201 CREATED: Veri eklendiği zaman verinin kendisi ile 201 dönülüyor.
204 NO CONTENT: Veri silindiği zaman 204 dönülüyor.
400 BAD REQUEST: Genel olarak kayıt ekleme ya da güncelleme isteklerinde gönderilen veri validasyondan geçemediyse neden geçemediği hakkında bilgiyle beraber 400 http statusuyla dönülür.
403 Forbidden: Yetkiye dayalı bir işlem yapılıyorsa bu api uç noktasında işlem yapmaya çalışan kişinin bu işlemi yapmaya yetkisi yoksa 403 status kodu döndürülür.
401 Unauthorized: Api ucunuzda bu işlemi yapmak için login olmak zorunlu ise ve apiye istek yapan kullanıcı login değil ise bu http status ile cevap verilir. Örneğin kullanıcının kendi bilgilerinin güncellemesi denilebilir.
404 Not Found: Bu http status  kullanıcının istek yaptığı url yok ise ya da url deki veri geçersiz ise bu hatayı alırız. örneğin şöyle bir url miz olsun /api/v1/account/bahattincinic sondaki bölüm kullanıcı adı. Buraya sistemimizde olmayan bir kullanıcı girersek 404 alırız.
405 Method Not Allowed:
Bu http status u istek yapılan api uç noktası gönderilen methodu implemente etmemiş ise bu http status unu alırız. Örneğin login olması için token verdiğimiz bir api ucumuz var ve bu uçta sadece post isteğini kabul ediyor. Kullanıcı bu api urline GET isteği yaparsa bu hatayı alır.

429 Too Many Requests: Bu http statusunu saatlik ya da dakikaklık kısıtlanan sınırdan fazla istek yaparsak bu http statusunu alırız. 

HTTP statuslarını gruplayacak olursak;
Bilgilendirme – 1xx
Başarılı İşlem – 2xx
Yönlendirmek – 3xx
Kullanıcı Taraflı hata – 4xx
Server Taraflı hata – 5xx

Ha bu da olmadı diyorsanız, kedilerle anlamanız için de bu linki kullanabilirsiniz 🙂 : http://ruffledcrow.com/2012/03/06/http-status-cats/

GET /tickets – Ticket Listesi
GET /tickets/12 – Ticket Detayı
POST /tickets – Yeni Ticket Ekleme
PUT /tickets/12 – Ticket Güncelleme
PATCH /tickets/12 – Ticketin bir kısmını güncelleme
DELETE /tickets/12 – Ticket Silme

GET /tickets/12/messages 12 id li ticket e bağlı mesajlar listesi
GET /tickets/12/messages/5 5 id li mesajın detayı
POST /tickets/12/messages 12 id li ticket e mesaj ekleme
PUT /tickets/12/messages/5 Mesaj güncelleme
PATCH /tickets/12/messages/5 Mesajın belli bir kısmını güncelleme
DELETE /tickets/12/messages/5 5 id li mesajı silme

GET /tickets?sort=-created_at&page=1 – Ticketları Eklenme tarihini büyükten küçüge sıralama işlemi ve birinci sayfa verisini getir
GET /tickets?type=1&sort=-created_at – Ticketları Eklenme tarihini büyükten küçüğe sıralama işlemi ve tipi 1 olan ticketlar
GET /tickets?fields=id,subject,customer_name,updated_at&type=1&sort=-updated_at – Sadece belli fiedleri ve tipi 1 olan son güncelleme tarihine göre büyükten küçüğe sıralama

Aşağıdaki youtube videosunu izleyerek (eğer engellenmediyse) REST API hakkında detaylı fikir sahibi olabilirsiniz.

İyilikler dilerim,

Oben

  • Ahmet Sali

    anlatım için teşekkürler.

    • oben

      Ben teşekkür ederim Ahmet

  • Zafer

    Request yap html uzerinden demissin ama http uzerinden demek daha dogru degil mi acaba?

    Yazi icin tesekkurler.

    • Oben Işık

      Tabiki orada artık hızlı yazmanın etkisiyle yanlış yazmışım. Doğrusu HTTP olacak.

  • Enis Kurtay Yılmaz

    Yazı çok başarılı 🙂

  • gnykspr

    Bu kadar başarılı anlatılır. Teşekkürler.

    • Oben Işık

      Ben teşekkür ederim

  • hasan

    Çok güzel anlatmışsınız, Teşekkürler.

  • Mustafa Nyt

    Kardeş bir örnekle de süslerseniz süper ötesi olur. Emeğinize sağlık.