REST özelliği (hangi seviye ile gitmek isterseniz) veritabanı erişimi olarak tasarlanmamıştır. API erişimine standardizasyon getirmeye çalışıyor. Söz konusu SQL kuralları (kullanmak isteyip istemediğiniz), API erişimi göz önünde bulundurularak tasarlanmamıştır. SQL sorguları yazmak içindir.
Bu yüzden burada açılacak olan konu, bir API'nin doğrudan veritabanına eşleştiği kavramsal anlayıştır. Bunu en azından 2009 yılına kadar bir anti-patern olarak tanımlayabiliriz .
Bunun temel nedeni bu kadar kötü mü? "Bu işlem verilerimi nasıl etkiler?" Açıklayan kod. müşteri kodu olur .
Bunun API üzerinde oldukça korkunç etkileri var. (ayrıntılı bir liste değil)
API ile entegrasyonu zorlaştırır
Şunun gibi belgelenen yeni bir kullanıcı oluşturma adımlarını hayal ediyorum:
POST /users { .. }
POST /usersettings { .. }
bazı varsayılan değerlerle
POST /confirmemails { .. }
Fakat 2. adımdaki başarısızlığı nasıl ele alıyorsunuz? Bu aynı kullanım mantığı kopya-makarnanız API'nizin diğer müşterilerine kaç kez geliyor?
Bu veri işlemlerinin istemciden tek bir işlem olarak başlatılması sırasında sunucu tarafında sıralanması daha kolaydır. Örn POST /newusersetup
. DBA'lar bunu saklı bir prosedür olarak tanıyabilir, ancak API işleminin sadece veritabanının ötesinde etkileri olabilir.
API'yi güvenceye almak umutsuzluğun bir kara deliği olur
İki kullanıcı hesabını birleştirmeniz gerektiğini varsayalım.
GET /users/1
PUT /users/2 { .. }
DELETE /users/1
Kullanıcının silinmesine izin vermezken birleştirme özelliğine izin vermek için bir kullanıcı iznini nasıl oluşturacaksınız? Bir kullanıcıyı silmek, var DELETE /users/1
olduğunda bile adil bir şekilde temsil ediliyor /usersettings
mu?
API işlemleri, sistemde birden fazla değişikliğe neden olabilecek daha yüksek (veritabanından daha) seviyeli işlemlere bakılmalıdır.
Bakım zorlaşıyor
... çünkü müşterileriniz veritabanı yapınıza bağlı.
Bu senaryodaki tecrübelerime dayanarak:
- Mevcut tabloları / sütunları yeniden adlandıramaz veya kaldıramazsınız. İşlevleri için yanlış adlandırılmış olsalar bile veya artık kullanılmazlarsa bile. Müşteriler kırılacak.
- Yeni özellikler mevcut veri yapılarını değiştiremez, bu yüzden verileri ve işlevselliği, mevcut bir özelliğe bütünsel olarak ait olsa bile yapay olarak ayrılır.
- Kod temeli, parçalanma, kafa karıştırıcı isimler ve güvenli bir şekilde kaldırılamayan fazla bagaj nedeniyle anlaşılması zorlaşıyor.
- Önemsiz değişiklikler hariç, tümü giderek daha riskli ve zaman alıcı hale geliyor.
- Sistem durur ve sonunda değiştirilir.
Veri tabanı yapınızı doğrudan istemcilere maruz bırakmayın ... özellikle üzerinde geliştirme kontrolü olmayan istemcilere. İstemciyi yalnızca geçerli işlemlerle sınırlamak için bir API kullanın.
Yani bir API'yi sadece bir veritabanına doğrudan bir arayüz olarak kullanıyorsanız, çoğullaşma endişelerinizin en azıdır. Bir fırlatma deneyi dışında, API'nin temsil etmesi gereken daha yüksek seviyeli işlemleri belirlemek için biraz zaman geçirmenizi öneririm. Ve bu şekilde baktığınızda, çoğullaştırılmış API varlık adları ile tekil SQL varlık adları arasında bir çelişki yoktur. Farklı nedenlerden dolayı varlar.