RESTful API'si ne kadar ayrık olmalıdır?


12

Daha önce hiç RESTful API inşa etmedim ve ne kadar ayrık olması gerektiğini merak ediyorum?

Örneğin, adı, adresi, telefon numarası, e-posta adresi, dili vs. olan bir müşterim olduğunu varsayalım.

Her bir alanı (güncelleme adresi, güncelleme e-posta adresi, vb.) Güncellemenin bir yolu var mı, yoksa tüm müşteri için tek bir güncelleme olmalı mı ve her alan isteğe bağlı mı?


3
REST'in hangi kısmını istiyorsunuz? Standartlar hakkında endişelenmeyen basit bir API'ye ihtiyacınız varsa, tıpkı thorsten müller'in kabul edilen cevabı gibi kullanabilirsiniz. Gerçek bir REST istiyorsanız, Roy Fielding'i (örneğin + tez) aramanız gerekir. REST'in mucididir. Örneğin bir kaynak == tablonun gerçek olmadığı fikrini göreceksiniz. Örneğin, sorunuz için bir PATCH HTTP yönteminin bir veya daha fazla alanı güncellemek için oldukça yaygın olduğunu göreceksiniz. POST veya PUT (burada çok sayıda tartışma) yöntemi bir kaynaktaki tam güncellemeler için kullanılabilir.
Luc Franken

Yanıtlar:


17

Bir kaynak için bir güncelleme işleminiz var. Zor bir kural olarak, veritabanınızdaki bir tablo bir kaynak olacaktır. Dolayısıyla, örneğinizde Müşteri için bir güncelleme eylemi olan bir denetleyici vardır ve alanlar mümkün olduğunca isteğe bağlıdır.

Bunun istisnaları olabilir (örneğin, şifre ve şifre_kontrolü beklediğiniz şifreyi güncellerseniz), ancak bu çoğu durumda geçerlidir.

İstisnaların, yalnızca oluşturulabilen ve yok edilebilen bir SessionsController gibi bazı kaynaklar için sınırlı eylemleri olan denetleyiciler olması daha olasıdır. Tek alanlar için işlem yapmak istemeniz pek olası değildir.

Örneğinizde bir şey kendi kaynağı olarak ele alınabilir ve adres budur. Adresler için bir tablonuz varsa, özellikle müşteri başına birden fazla adres varsa (faturalandırma, teslimat ...) bu, iç içe kaynak olarak ele alınabilir. Ancak yine tüm adres kaynağı için bir güncelleme eylemi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.