API Nedir? RESTful API ve Tasarım Prensipleri

Serkan Yaşar
10 min readSep 28, 2024

--

API Nedir?

API (Application Programming Interface), bir yazılımın diğer yazılımlar ile etkileşime girebilmesini sağlayan bir arayüzdür. Temel olarak, API’ler farklı yazılımların birbirleriyle iletişim kurabilmesini, veri alışverişi yapabilmesini ve fonksiyonlarını paylaşabilmesini mümkün kılar. Bu etkileşim genellikle standart bir protokol (örneğin HTTP, HTTPS) üzerinden gerçekleşir.

API’ler, modern yazılım geliştirmede kilit bir rol oynar ve çok sayıda teknoloji ve sistemin entegrasyonunu kolaylaştırır. Örneğin, bir hava durumu uygulaması, arka planda bir hava durumu API’sini kullanarak güncel verileri bir servisten çeker. Aynı şekilde, sosyal medya platformları, ödeme sistemleri veya harita hizmetleri, API’ler aracılığıyla geliştiricilere işlevler sunar ve bu işlevler uygulamalara entegre edilebilir.

API Nasıl Çalışır?

API’ler, bir uygulamanın belirli bir işlevselliğini veya veriyi paylaşmak için tanımlanmış yöntemler ve veri yapıları sunar. Örneğin, bir API istemcisi (kullanıcı uygulaması) belirli bir isteği (request) API sunucusuna gönderir. Bu istek, API tarafından işlenir ve sonuç (response) geri döner. API’ler genellikle REST, SOAP veya GraphQL gibi mimari yaklaşımlar ile yapılandırılır. REST API’ler, genellikle HTTP metodları kullanarak (GET, POST, PUT, DELETE) veri alışverişi yapar.

API’nin Hayatımızdaki Yeri Nedir?

API’ler, dijital ekosistemin temel taşlarından biridir ve günlük yaşamımızda sıkça kullanılan uygulamaların arka planında aktif bir rol oynar. Örneğin:
- Mobil uygulamalar: Hava durumu, harita, sosyal medya ve bankacılık uygulamaları API’ler kullanarak arka planda çeşitli servislerle etkileşime girer.
- E-ticaret: Ödeme sistemleri, stok kontrolü, sipariş takip sistemleri, API’ler aracılığıyla birbirleriyle entegre olur.
- Sosyal Medya: Instagram veya Twitter gibi platformlar, üçüncü taraf uygulamaların kendi hizmetleriyle etkileşim kurabilmesi için API’ler sunar.

Hangi Teknolojilerde Kullanılmaktadır?

API’ler, neredeyse her teknoloji platformunda kullanılmaktadır:
- Web ve Mobil Geliştirme: Web API’leri, web ve mobil uygulamalarda sıkça kullanılır. RESTful API’ler veya GraphQL gibi teknolojiler yaygındır.
- IoT (Internet of Things): Akıllı cihazlar ve sensörler, API’ler aracılığıyla bulut hizmetlerine veri gönderir ve oradan komut alır.
- Yapay Zeka ve Makine Öğrenimi: AI API’leri, doğal dil işleme (NLP), görsel tanıma veya öneri sistemleri gibi işlevlerin dış uygulamalarda kullanılmasını sağlar.
- Oyun Geliştirme: Oyun platformları, multiplayer hizmetleri, kullanıcı verileri veya oyun içi satın alımlar için API’ler sunar.

Özetle, API’ler farklı yazılımlar arasında bir köprü görevi görerek, teknolojilerin bir araya gelip daha güçlü ve entegre çözümler üretmesini sağlar.

Dağınık API Tarihi

API kavramı, kişisel bilgisayarların ortaya çıkışından önce bile yazılımlar arasında iletişim kurmak için kullanılan önemli bir teknoloji olmuştur. Geçmişten günümüze kadar olan API tarihçesi, teknolojinin evrimini gözler önüne serer:

[1970'ler] —Yerel Ortamda Çalışan API’ler

Bu yıllarda API’ler genellikle aynı bilgisayar üzerinde çalışan farklı kütüphaneler veya yazılımlar arasında iletişim kurmak için kullanılıyordu. Bilgisayarlar tek bir sistemde çalışırken bile, modüller arası veri alışverişi önemliydi. Bu dönemde kullanılan birkaç teknoloji:
- RPC (Remote Procedure Call): Yazılımlar, başka bir adresteki (uzak veya yerel) bir prosedürü çağırabilir ve sonuçları alabilir. Yani, bir bilgisayar üzerindeki farklı yazılım parçalarının birbirini çağırarak görev yapmasını sağlar.
- Messaging Yazılımlar, mesajlar aracılığıyla birbirleriyle haberleşirdi. Bu mesajlar belirli protokoller kullanılarak iletilirdi.
- Queueing: Mesajlar, kuyruklara yerleştirilerek asenkron bir şekilde işlenirdi. Bu, işlemlerin paralel olarak yapılabilmesini ve sistemin yoğun olduğu zamanlarda performansın korunmasını sağlardı.

[1990'lar] — İnternetin Yükselişi ve Dağıtık API’ler

1990'lı yıllarda internetin yaygınlaşmasıyla birlikte API’ler yerel ortamdan çıkıp uzak sunucular ile haberleşme ihtiyacı doğdu. Bu dönemde nesneye yönelik programlama paradigması popülerleşti ve farklı sistemlerde çalışan nesnelerin birbirleriyle iletişim kurması sağlandı.
- COM/DCOM (Component Object Model / Distributed COM): Microsoft tarafından geliştirilen bu teknoloji, yerel veya dağıtık ortamda çalışan nesneler arasında iletişimi sağlamak için kullanıldı.
- CORBA (Common Object Request Broker Architecture): Farklı dillerde yazılmış uygulamaların birbirleriyle iletişim kurmasını sağlayan bir standarttı.
- Java RMI (Remote Method Invocation): Java programlarının, farklı makinelerdeki Java nesnelerini çağırmasına olanak sağlayan bir mekanizmaydı.

[2000'ler] — Her Şeyin Birbiriyle Haberleşmesi Gerektiği Dönem

Bu dönemde, uygulamaların sadece kendi başlarına çalışması yeterli olmamaya başladı. Farklı sistemler, uygulamalar ve platformlar arasında veri alışverişi ve entegrasyon büyük önem kazandı.
- XMLHTTP: İnternet üzerinde veri alışverişi için kullanılan, XML formatında veri göndermeyi sağlayan bir teknoloji.
- SOAP (Simple Object Access Protocol): SOAP, XML ve HTTP üzerinden haberleşme sağlayarak, platformdan bağımsız olarak uygulamalar arasında veri alışverişi yapmayı mümkün kıldı. Ancak, her veri alışverişi için fazladan meta bilgilerin sağlanması gerektiği için zamanla hantallaştı ve esneklik kaybı yaşandı. Bu yüzden daha hafif ve esnek bir yapıya olan ihtiyaç arttı.

REST

SOAP, sıkı protokol kuralları ve XML formatına olan bağımlılığı nedeniyle, esneklik sağlama konusunda sınırlıydı. Her küçük veri alışverişi için fazladan meta bilgilerin sağlanması gerekiyordu. Bu durum, geliştiriciler tarafından daha hafif ve esnek bir çözüm olan REST (Representational State Transfer) mimarisinin ortaya çıkmasına neden oldu. REST, HTTP protokolü ile daha basit ve kolay entegre edilebilen bir yapı sundu.

[Günümüz] — Modern API Teknolojileri

Günümüzde, API’ler daha hızlı, esnek ve ölçeklenebilir hale geldi. Modern API teknolojileri, geliştiricilere daha güçlü araçlar sunarak kullanıcı deneyimini optimize ediyor:
- GraphQL: Facebook tarafından geliştirilen GraphQL, istemcinin sadece ihtiyaç duyduğu veriyi almasını sağlayan esnek bir sorgulama dili sunar. Geleneksel REST API’lere göre daha az veri aktarımı sağlar ve performansı artırır.
- gRPC (gRPC Remote Procedure Calls): Google tarafından geliştirilen gRPC, hızlı ve verimli veri transferi sağlamak için HTTP/2 protokolünü kullanır. İkili veri formatı olan Protobuf (Protocol Buffers) ile çalışır ve çok düşük gecikme süreleriyle yüksek performans sunar.

Bu API’ler, modern uygulamalarda daha hızlı veri alışverişi, daha esnek veri sorgulama ve ölçeklenebilir mimariler oluşturmayı sağlar.

API’nin Sistemler Arasında Kullanımı ve Rolü

API’lerin bir sistemde nasıl ve nerede kullanıldığını anlatan bu diyagram, genel olarak API’lerin sistemler arası veri alışverişinde nasıl bir rol oynadığını gösteriyor. Şimdi bu diyagramdaki bileşenleri ve API’nin kullanımını açıklayalım:

Backend Systems

Backend sistemleri, verinin işlendiği ve saklandığı katmandır. Burada üç ana bileşen bulunur:

1. Services (Servisler): Backend’in iş mantığı bu kısımda çalışır. Servisler, veriyi işler ve ihtiyaç duyulan işlemleri gerçekleştirir. Örneğin, bir e-ticaret uygulamasında sipariş yönetimi servisi, sipariş oluşturma, iptal etme ve güncelleme gibi işlemleri yapar.

2. Persistence (Veri Sürekliliği): Verilerin saklandığı katmandır. Genellikle veritabanı işlemleri burada gerçekleşir. Servisler bu katman ile etkileşime geçerek veri yazma, okuma, güncelleme gibi işlemleri yapar.

3. Presentation (Sunum Katmanı): Backend sistemlerin sunduğu veriyi, frontend sistemlerle paylaşmadan önce yapılandırıldığı katmandır. Bu katmanda, veriler daha düzenli ve frontend ihtiyaçlarına uygun bir şekilde hazırlanır.

API’ler

API’ler, backend ve frontend sistemleri arasında köprü görevi görür. API’ler, backend’deki veriyi ve işlevleri frontend ile paylaşmak için standartlaştırılmış bir iletişim mekanizması sağlar. Burada, Presentation katmanındaki veriler, API aracılığıyla frontend’e gönderilir.

Örneğin, bir mobil uygulama kullanıcısının ürün listesi talebinde bulunduğunu düşünelim. Bu durumda:
- Mobil uygulama, API üzerinden backend’e istek (request) gönderir.
- Backend tarafında, Services katmanı talebi işler ve veritabanından gerekli bilgileri Persistence katmanını kullanarak alır.
- Sonrasında, Presentation katmanında bu veriler mobil uygulamaya uygun hale getirilir.
- Son olarak, API aracılığıyla mobil uygulamaya yanıt (response) gönderilir.

Frontend Systems

Frontend sistemler, kullanıcıların etkileşime geçtiği platformlardır. API’ler sayesinde backend’deki işlevler ve veriler frontend sistemlere aktarılır. Bu diyagramda üç tür frontend sistemi gösterilmiştir:
1. Web: API’ler üzerinden web uygulamaları backend sistemlerle iletişim kurarak veri alır ve gönderir.
2. Mobile (Mobil): Mobil uygulamalar da API’leri kullanarak backend servisleriyle haberleşir. Örneğin, bir mobil alışveriş uygulaması ürün bilgilerini API’ler aracılığıyla backend’den çeker.
3. IoT (Internet of Things) Cihazları: IoT cihazları, veri toplamak veya işlem yapmak için API’ler aracılığıyla backend sistemlere bağlanır. Örneğin, bir akıllı ev cihazı, sıcaklık verilerini backend’e iletmek için bir API kullanabilir.

HTTP Protokulü Nasıl Çalışır

HTTP protokolünün çalışma prensibini açıklayan bu diyagram, bir istemci ile sunucu arasındaki tipik bir etkileşimi göstermektedir. Şimdi bu yapıyı daha ayrıntılı açıklayalım:

İstemci ve Sunucu İletişimi

HTTP protokolünde bir iletişim, iki temel aşamadan oluşur: request (istek) ve response (yanıt).

Request (İstek): İstemci (bu örnekte bir bilgisayar veya mobil uygulama) sunucuya bir HTTP isteği gönderir. Bu istek, sunucudan belirli bir veri talep eder ya da sunucuya bir işlem yaptırmak ister. İstek paketinde genellikle şunlar bulunur:
— Method (Metot): İstek türünü belirler. Örneğin, POST (veri gönderme) ya da GET (veri alma) metotları kullanılabilir.
— Content-Length (İçerik Uzunluğu): İletilen verinin boyutunu belirtir.
— Body (Gövde): İletilecek asıl veri.

2. Response (Yanıt): Sunucu, gelen isteği değerlendirir ve uygun bir yanıt hazırlar. Yanıtta genellikle şunlar bulunur:
— Status Code (Durum Kodu): Sunucunun isteğe nasıl yanıt verdiğini belirten bir kod. Örneğin, 201, başarılı bir POST işlemi anlamına gelir.
— Content-Type (İçerik Türü): Yanıtın formatını belirtir (örneğin, text ya da JSON).
— Body (Gövde): Sunucunun döndürdüğü asıl yanıt.

Stateless (Durumsuz)

HTTP, stateless (durumsuz) bir protokoldür. Bu, her isteğin birbirinden bağımsız olduğu ve sunucunun önceki isteklerle ilgili herhangi bir bilgi tutmadığı anlamına gelir. Örneğin, oturum açma veya yetkilendirme bilgileri her istekle birlikte yeniden sunucuya iletilmelidir, çünkü sunucu istemciyi hatırlamaz. İstemci ve sunucu arasındaki her istek, baştan bağımsız bir iletişim olarak değerlendirilir.

Request Yapısı ve HTTP Metotları

İstek (request) yapısı, istemci tarafından sunucuya yapılan talebi içerir ve bu yapı, bir web API’sinde hangi işlemin yapılacağını belirler. İsteklerin temel bileşeni HTTP metotları (HTTP verbs) olarak adlandırılan eylemlerdir. İşte bu metotların her birine kısa bir açıklama:

GET

- Amaç: Sunucudan belirli bir kaynağı istemek için kullanılır.
- Kullanımı: İstemci, sunucudaki mevcut bir kaynağı alır. Örneğin, bir veri tabanındaki kayıtları görüntülemek için kullanılır.
- Başarılı Durum Kodu: Genellikle 200 (Başarılı) döner ve istenilen veri response ile gönderilir.
- Diğer Durum Kodları:
— 204 No Content: İstek başarılıdır ancak geri dönecek bir içerik yoktur.
— 404 Not Found: İstenilen kaynak sunucuda bulunamamıştır.

POST

- Amaç: Sunucu üzerinde yeni bir kaynak oluşturmak veya bir süreci tetiklemek için kullanılır.
- Kullanımı: Örneğin, yeni bir kayıt eklemek veya form verilerini sunucuya iletmek için kullanılır.
- Başarılı Durum Kodları:
— 201 Created: Yeni bir kaynak başarıyla oluşturulmuştur.
— 200 Success: Bir işlemi tetiklemek için yapılan isteğin başarılı olduğunu belirtir.

PUT

- Amaç: Sunucudaki bir kaynağı tamamen güncellemek veya sunucu destekliyorsa yeni bir kaynak oluşturmak için kullanılır.
- Kullanımı: PUT işlemi genellikle var olan bir kaynağın tüm alanlarını güncellemek için kullanılır.
- Başarılı Durum Kodu: 200 (Başarılı) veya 204 (No Content).

PATCH

- Amaç: Bir kaynağın belirli alanlarını kısmi olarak güncellemek için kullanılır.
- Kullanımı: Eğer yalnızca bir veya birkaç alan güncellenecekse, tüm kaynağı değiştirmek yerine PATCH metodu tercih edilir.
- Başarılı Durum Kodu: 200 (Başarılı).

DELETE

- Amaç: Sunucudaki mevcut bir kaynağı silmek için kullanılır.
- Kullanımı: Belirli bir veri ya da kaynağın sunucudan tamamen kaldırılması için kullanılır.
- Başarılı Durum Kodu: 200 (Başarılı) veya 204 (No Content).

Headers

Headers, bir istek (request) ya da yanıtın (response) meta verilerini tutan bölümdür. Bu bölüm, işlemle ilgili detaylı bilgileri içerir ve istemci-sunucu arasındaki iletişimi yönetir. İşte en sık kullanılan bazı headers:

- Content-Type: Gönderilen veya alınan verinin formatını belirtir. Örneğin, JSON, XML veya CSV.
- Content-Length: Verinin boyutunu ifade eder.
- Authorization: Sunucuda yetkilendirilmiş alanlara erişim sağlamak için kullanılır. Örneğin, bir API anahtarı veya token bu alanda gönderilir.

Headers, veri iletimi sırasında hem güvenlik hem de veri doğrulama için kritik önem taşır.

Content

Content, istekte gönderilen veya yanıtta dönen asıl veri bölümüdür. Örneğin, bir form verisi ya da JSON formatında bir API cevabı content bölümünde bulunur.

Response Yapısı

Response sunucunun istemciye gönderdiği yanıttır. Üç ana bileşeni vardır:

-Status Code: Sunucunun isteğe verdiği yanıtın durumunu gösterir. Örneğin, 200 (Başarılı), 404 (Bulunamadı), 500 (Sunucu Hatası).

-Headers: Sunucunun yanıtla ilgili meta bilgileri içerir. İstek sırasında kullanılan headers ile benzer niteliktedir.

Content: Yanıtın içeriğidir, sunucu tarafından oluşturulan veriyi tutar.

RESTful API Tasarımı

REST (Representational State Transfer), sunucu ile istemci arasında veri alışverişi yapmayı sağlayan bir mimari tarzıdır. REST, basit, hafif ve performans odaklı bir yapı sunar. Bu sistemde kaynaklar, HTTP protokolü aracılığıyla istek (request) ve yanıtlar (response) ile taşınır. RESTful API tasarımında doğru bir kaynak modeli ve mantıklı URI yapısı oluşturmak, API’nin kullanılabilirliğini artırır.

REST API Bileşenleri

1. URI’ler (Uniform Resource Identifiers):
— URI’ler, API’de yer alan kaynakların yerini belirtir. RESTful API tasarımında URI yapısı sade ve anlaşılır olmalıdır. Kaynaklar genellikle çoğul adlarla tanımlanır.
— Örnekler:
— `/books`: Tüm kitapların listesi.
— `/books/latest`: Son çıkan kitapların listesi.
— `/books/mostread`: En çok okunan kitaplar.

2. Sorgu Dizeleri (Query String):
— Veri olmayan öğelere, özellikle filtreleme, sıralama ve arama işlemleri için sorgu dizeleri kullanılır. Sorgu dizeleri URI’de belirtilen kaynağa eklenerek spesifik sonuçlar alınmasını sağlar.
— Örnek sorgu parametreleri:
— `?sort=desc`: Verilerin ters sıralanması.
— `?search=author&name=Serkan`: Yazar adı “Yaşar” olan kitapları arama.
— `?format=json`: Yanıt formatını belirtme.

RESTful API tasarımı, kaynakların anlaşılır ve erişilebilir olması için iyi bir URI yapısı ve esnek sorgu dizeleri sağlamayı gerektirir.

Request yapısı:

Response Yapısı:

RESTFull API TASARIMINDA EN İYİ PRATİKLER

Kaynak tasarımı yaparken URI’lerde fiil yerine isimlerin kullanılması tercih edilmelidir.

URI’lerde kaynak isimlerinin çoğul formlarını kullanın. Örneğin, /book yerine /books kullanın.

Kaynakla doğrudan ilişkisi bulunmayan sorgularda query string kullanılır. “?” işaretinden sonra, & (ve) operatörü ile ayrılan ifadeler query string olarak adlandırılır.

RESTful API Tasarımında En İyi Uygulamalar:

1. Sonuçların Kendini Tanımlaması: HATEOAS (Hypermedia as the Engine of Application State) desteği ile, API yanıtları, mevcut kaynakların bağlantılarını içermelidir. Bu, istemcilerin mevcut kaynaklarla etkileşim kurmasını kolaylaştırır.

2. Programlı Gezinmeye İzin Verme: URI yapısını tasarlarken, hiyerarşik bir mimari kullanmak önerilir. Örneğin: `/books/romanlar/SucVeCeza` veya `/users/user/serkan`.

3. Sayfalama, Sıralama, Filtreleme, Arama Desteği: API, büyük veri kümesi üzerinde işlem yaparken performansı artırmak için bu özellikleri desteklemelidir.

4. Önbellek Desteği Sunma: API üzerindeki yükü azaltmak ve performansı artırmak için yanıtların önbelleğe alınmasını sağlamak önemlidir.

5. Sorgu Sınırı Getirilmesi: İstemcinin API’ye sürekli sorgu yapmasını sınırlayarak (örneğin, 1 dakikada 60 sorgu) API üzerindeki yükü azaltabilirsiniz.

6. Veri Şekillendirme: Sunucu tarafından üretilen verilerin, kullanıcının ihtiyaçlarına uygun şekilde şekillendirilip iletilmesi sağlanmalıdır.

7. Versiyonlama: API’nin belgelenmesi ve versiyonlanması, kullanıcıların API tasarımını daha iyi anlamalarına olanak tanır. Bu, API değişikliklerinin yönetimini kolaylaştırır.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Serkan Yaşar
Serkan Yaşar

Written by Serkan Yaşar

Interested in artificial intelligence, machine learning and deep learning

No responses yet

Write a response