REST API Nasıl Oluşturulur: Tasarım, Güvenlik ve Yayınlama
REST API oluşturmak için uygulamanızın yönettiği kaynakları (kullanıcılar, siparişler, rezervasyonlar) listeleyin, her birine /orders ve /orders/{id} gibi bir URL verin ve eylemler için HTTP metotlarını kullanın: okumak için GET, oluşturmak için POST, güncellemek için PATCH, silmek için DELETE. Anlamlı durum kodları ile JSON döndürün, her girdiyi doğrulayın, sunucuda kimlik doğrulama ve kayıt bazında yetki kontrolü isteyin ve listeleri sayfalara bölün. Ardından uç noktaları belgeleyin ve API'yi HTTPS arkasında yayınlayın.
Bu rehber tasarım kararlarını, örnek bir rota setini, bir yapay zeka uygulama oluşturucusu için istemleri ve güvenlik açıklarına yol açan hataları kapsar. API'ler sizin için yeniyse, API nedir sayfasıyla başlayın.
Ne zaman REST API'ye ihtiyacınız olur
- Web arayüzünüzün verileri sunucuya kaydetmesi ve sunucudan yüklemesi gerekiyorsa
- Bir mobil uygulamanın, iş ortağının veya otomasyon aracının verilerinize erişmesi gerekiyorsa
- Diğer servislerin size olaylar göndermesi gerekiyorsa (webhook'lar)
- Çalışmayı bir ön yüz ve bir arka yüz ekibi arasında bölüyorsanız
REST en yaygın stildir, ancak tek seçenek değildir. REST ile GraphQL sayfası, tek ve esnek bir sorgu uç noktasının ne zaman daha uygun olduğunu açıklar.
Önce tasarlayın: kaynaklar ve rotalar
Uygulamanızdaki isimleri ve insanların bunlarla ne yaptığını yazın. Basit bir rezervasyon uygulaması için:
| Metot | Rota | Yaptığı iş | Başarı kodu |
|---|---|---|---|
GET | /api/bookings | Çağıranın rezervasyonlarını listeler (sayfalı) | 200 |
POST | /api/bookings | Bir rezervasyon oluşturur | 201 |
GET | /api/bookings/{id} | Tek bir rezervasyonu getirir | 200 |
PATCH | /api/bookings/{id} | Bazı alanları değiştirir | 200 |
DELETE | /api/bookings/{id} | Bir rezervasyonu iptal eder | 204 |
GET | /api/health | İzleme için sağlık kontrolü | 200 |
Bunlar oluşturma, okuma, güncelleme ve silme işlemlerine karşılık gelir; bkz. CRUD nedir. Uyulmaya değer kurallar:
- URL'lerde çoğul isimler, fiil yok:
/getBookingsyerine/bookings. - Sahipliği netleştirdiğinde yalnızca bir seviye iç içe kullanın:
/bookings/{id}/notes. - CRUD dışındaki eylemler alt kaynak olabilir: sihirli bir PATCH yerine
POST /bookings/{id}/canceldaha açıktır. - Alanlar için tutarlı adlandırma kullanın, örneğin her yerde
created_at.
Durum kodları ve hatalar
İstemcilerin metni ayrıştırmadan ne olduğunu anlayabilmesi için standart HTTP kodlarını kullanın:
| Kod | Anlamı | Ne zaman kullanılır |
|---|---|---|
| 200 | OK | Başarılı okuma veya güncelleme |
| 201 | Created | Bir POST bir şey oluşturduğunda |
| 204 | No Content | Döndürülecek bir şey olmadan başarı |
| 400 | Bad Request | Girdi doğrulamayı geçemedi |
| 401 | Unauthorized | Giriş yapılmamış veya geçersiz token |
| 403 | Forbidden | Giriş yapılmış ama izin yok |
| 404 | Not Found | Kayıt yok ya da çağıranın varlığını bilmemesi gerekiyor |
| 409 | Conflict | Tekrarlanan kayıt veya slot zaten dolu |
| 429 | Too Many Requests | Hız sınırına ulaşıldı |
| 500 | Server Error | Sizin tarafınızda bir şey bozuldu |
Hataları tek ve tutarlı bir JSON biçiminde döndürün, örneğin {"error": {"code": "slot_taken", "message": "Bu saat artık müsait değil."}}, ve yanıtlarda asla yığın izleri (stack trace) ya da veritabanı hatalarını göstermeyin.
Seçenekler ve ödünler
| Karar | Basit seçim | Alternatif |
|---|---|---|
| API nerede yaşar | Web çerçevenizdeki API rotaları | Birden fazla istemci veya farklı bir dil için ayrı bir API servisi |
| Kimlik doğrulama | Kendi web uygulamanız için oturum çerezleri | Mobil uygulamalar ve üçüncü taraflar için token'lar (bearer token veya API anahtarı) |
| Sayfalama | ?page=2&limit=20 | İmleç tabanlı (?after=...), büyük ve değişken listeler için daha istikrarlı |
| Sürümleme | Dış kullanıcılarınız olana kadar yok | Başkaları bağımlı olduğunda yolda /v1/ |
| Dokümantasyon | Rotaları listeleyen bir README | Araçların etkileşimli dokümantasyon ve istemci kodu üretebildiği bir OpenAPI spesifikasyonu |
Adım adım
- Yukarıdaki gibi kaynakları ve rotaları listeleyin, her birini kimin çağırabileceğiyle birlikte.
- İhtiyacınız olan alanlar ve ilişkilerle veriyi veritabanınızda modelleyin.
- Önce okuma rotalarını, ardından oluşturma, güncelleme ve silme rotalarını yapın.
- Her yazma işleminde bir şema kütüphanesiyle girdiyi doğrulayın: zorunlu alanlar, türler, uzunluklar, izin verilen değerler. Bilinmeyen alanları reddedin.
- Kimlik doğrulama ekleyin, ardından kayıt bazında yetkilendirme ekleyin:
/bookings/42isteği yalnızca birinin giriş yapmış olmasını değil, 42 numaralı rezervasyonun çağırana ait olduğunu kontrol etmelidir. - Her listeyi sayfalara bölün ve sayfa boyutunu sınırlayın.
- Giriş ve pahalı rotalara hız sınırı koyun. Bkz. hız sınırlama.
- CORS'u yalnızca başka alan adlarındaki tarayıcıların API'yi çağırması gerekiyorsa yapılandırın ve bu kökenleri açıkça listeleyin. CORS hatalarını düzeltme sayfası karşılaşacağınız hataları anlatır.
- Her rota için, başarısız senaryolar dahil dokümantasyon ve testler yazın.
- Yayınlayın: gizli bilgiler ortam değişkenlerinde, HTTPS, günlükler ve bir sağlık kontrolüyle.
Yapay zeka oluşturucunuza verilecek istemler
İskelet:
Şu rotalara sahip rezervasyonlar için bir REST API oluştur: GET /api/health, GET /api/bookings (sayfalı, sayfa başına en fazla 50), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Verileri veritabanımızda sakla. İstek gövdelerini bir şema kütüphanesiyle doğrula ve bilinmeyen alanları reddet. JSON hatalarını doğru durum kodlarıyla (400, 401, 403, 404, 409) {"error": {"code", "message"}} biçiminde döndür. Gizli bilgileri ortam değişkenlerinde tut.
Güvenlik:
Her rezervasyon rotası için giriş iste. Her okuma, güncelleme ve silme işleminde, rezervasyonun geçerli kullanıcıya ait olduğunu sunucuda kontrol et; değilse 404 döndür. İstek gövdesinden asla kullanıcı kimliği veya rol kabul etme. POST /api/bookings rotasını kullanıcı başına dakikada 20 ile sınırla. Hataları sunucuda günlüğe yaz, yığın izlerini döndürme.
Dokümantasyon:
Bu rotaların bir OpenAPI açıklamasını ve her biri için örnek istek ve yanıtlar içeren kısa bir README yaz.
API'nizi test etmek
Testleri ön yüzün dışından yapın, çünkü saldırganlar da öyle yapacaktır:
- Her rota geçerli girdiyle çalışır ve belgelenen biçimi ve kodu döndürür
- Eksik veya geçersiz alanlar açık bir mesajla 400 döndürür
- Token olmadan her korumalı rota 401 döndürür
- A kullanıcısı, ID ile B kullanıcısının kaydını istediğinde 404 veya 403 alır
- Listeler sayfalıdır; çok büyük bir
limitsınırlandırılır - Tekrarlanan veya çakışan oluşturma işlemleri 500 değil 409 döndürür
- Hız sınırları 429 döndürür
- Hata yanıtlarında yığın izi, SQL veya gizli bilgi yok
- CORS yalnızca amaçladığınız kökenlere izin veriyor
Sık yapılan hatalar
- Oturumu kontrol edip sahipliği kontrol etmemek. En yaygın API açığı: oturum açmış herhangi bir kullanıcı ID'yi değiştirerek herhangi bir kayda erişebilir.
- İstemciye güvenmek. İstek gövdesindeki fiyatlar, roller ve kullanıcı kimlikleri değiştirilebilir.
- Veritabanı satırlarının tamamını döndürmek. Parola özetleri ve dahili alanlar sızar. Her yanıtta neyin yer alacağını seçin.
- Sınırsız listeler. Her kaydı isteyen tek bir istek tüm uygulamayı yavaşlatabilir.
- İçinde hata mesajı olan
200 OK. İstemciler ve izleme sistemleri başarısız olduğunu anlayamaz. - CORS'un çerez kullanan bir API'de her şeye izin verecek şekilde ayarlanması.
- Sağlık kontrolü veya günlük olmaması, bu yüzden kesintileri kullanıcılardan öğrenmek.
Daha geniş bir yayın öncesi kontrol için bkz. yapay zeka ile oluşturulan uygulamalar için güvenlik kontrol listesi.
Mythex'te REST API oluşturmak
Mythex'ten API'yi uygulamanızın bir parçası olarak veya kendi başına bir servis olarak isteyebilirsiniz. Dokümantasyondaki REST API backend tarifinde bir başlangıç istemi var: çerçevenizi ve rotalarınızı belirtin, açık JSON hataları isteyin, gizli bilgileri ortam değişkenlerinde tutun ve bir Dockerfile ekleyin. Node, Python, C#, Java ve diğer dillerdeki konteyner tabanlı backend'ler bir Dockerfile ile yayınlanır ve Mythex dağıtımı Publish bölümünden yönetir (API backend'leri). Bir proje web sitesini ve bir API sunucusunu yan yana çalıştırabilir ve önizlemede aralarında geçiş yapabilirsiniz. API'nin bir veritabanına ihtiyacı varsa bunu sohbette isteyin. API'nizin etrafındaki zamanlanmış işler için bkz. arka plan işleri nasıl çalıştırılır.
Sorular
REST API nedir?
REST API, programların HTTP üzerinden uygulamanızın verileriyle çalışmasını sağlayan bir yöntemdir. Her veri türü kendi URL'sine sahip bir kaynaktır, örneğin /orders, ve standart metotlar bu kaynak üzerinde işlem yapar: okumak için GET, oluşturmak için POST, güncellemek için PATCH veya PUT, silmek için DELETE. Veriler genellikle JSON olarak gönderilir.
REST API'yi hangi dilde oluşturmalıyım?
Sizin veya ekibinizin sürdürebileceği dili kullanın. Express veya Fastify ile Node.js, FastAPI ile Python ve C# ya da Java çerçeveleri iyi çalışır. Rotalar, durum kodları, doğrulama ve kimlik doğrulama için kullanılan tasarım kuralları dilden daha önemlidir.
REST API'mi nasıl güvenli hale getiririm?
Herkese açık olmayan her rota için kimlik doğrulama isteyin, çağıranın her bir kayda erişme yetkisini sunucuda kontrol edin, tüm girdileri doğrulayın, HTTPS kullanın, istekleri hız sınırına tabi tutun ve gizli bilgileri ortam değişkenlerinde saklayın. İstemciden gelen kimlikleri veya rolleri asla güvenilir kabul etmeyin.
REST API için ayrı bir backend'e ihtiyacım var mı?
Her zaman değil. Next.js gibi çerçeveler, API rotalarını sayfalarla birlikte sunabilir. Birden fazla istemci (web, mobil, iş ortakları) API'yi kullandığında veya API'nin kendi dilinin ya da ölçeklenme ihtiyacı olduğunda ayrı bir API servisi mantıklı olur.