R REST kaynak açılımı
(Bu doğru değildir, çünkü Temsili anlamına gelir, ancak Kaynakların REST'teki önemini hatırlamak iyi bir hile).
Hakkında PUT /groups/api/v1/groups/{group id}/status/activate
: Eğer edilir değil bir "etkinleştirmek" güncelleme. "Aktive" bir şey değil, bir fiildir. Fiiller asla iyi bir kaynak değildir. Temel kural: eylem, bir fiil, URL'de bulunuyorsa, büyük olasılıkla RESTful değildir .
Onun yerine ne yapıyorsun? Ya bir Gruptaki bir aktivasyonu "ekler", "kaldırır" ya da "güncellersiniz" ya da isterseniz: bir Gruptaki "durum" kaynağını değiştirmek. Şahsen ben "aktivasyonları" kullanırım çünkü onlar "statü" kavramından daha az belirsizdirler: bir durum yaratmak belirsizdir, bir aktivasyon yaratmak değildir.
POST /groups/{group id}/activation
Bir etkinleştirme oluşturur (veya oluşturulmasını ister).
PATCH /groups/{group id}/activation
Mevcut bir aktivasyonun bazı ayrıntılarını günceller. Bir grupta yalnızca bir etkinleştirme olduğundan, hangi etkinleştirme kaynağına başvurduğumuzu biliriz.
PUT /groups/{group id}/activation
Eski aktivasyonu ekler veya değiştirir. Bir grupta yalnızca bir etkinleştirme olduğundan, hangi etkinleştirme kaynağına başvurduğumuzu biliriz.
DELETE /groups/{group id}/activation
Etkinleştirmeyi iptal eder veya kaldırır.
Bu model, bir Grubun "etkinleştirilmesi" nin ödemeler, gönderilen postalar vb. Sadece POST ve PATCH bu gibi yan etkilere sahip olabilir. Örneğin, bir aktivasyonun silinmesinin kullanıcıları posta yoluyla bildirmesi gerektiğinde DELETE doğru seçim değildir; bu durumda muhtemelen istediğiniz bir deaktivasyon kaynak oluşturmak : POST /groups/{group_id}/deactivation
.
Bu yönergeleri takip etmek iyi bir fikirdir, çünkü bu standart sözleşme müşterileriniz ve müşteri ile sizin aranızdaki tüm proxy'ler ve katmanlar için yeniden denemenin ne zaman güvenli olduğunu ve ne zaman yapılmadığını bilir. İstemcinin kesintili wifi ile bir yerde olduğunu ve kullanıcısının "devre dışı bırak" ı tıkladığını ve bu da aşağıdakileri tetiklediğini varsayalım DELETE
: Bu başarısız olursa, müşteri 404, 200 veya işleyebileceği başka bir şey alana kadar yeniden deneyebilir. Ancak bir tetikleme yaparsa POST to deactivation
yeniden denememeyi bilir: POST bunu ima eder.
Artık herhangi bir müşterinin, HTTP kütüphanesinin arka uca çağrıyı yeniden denemeye devam etmesi nedeniyle "grubunuz devre dışı bırakıldı" 42 e-postası göndermeye karşı koruyacak bir sözleşmesi var.
Tek bir özelliği güncelleme: PATCH kullanın
PATCH /groups/{group id}
Bir özelliği güncellemek istediğinizde. Örneğin, "durum" Google Grupları'nda ayarlanabilen bir özellik olabilir. "Durum" gibi bir özellik, genellikle değerlerin beyaz listesiyle sınırlanmak için iyi bir adaydır. Örnekler bazı tanımlanmamış JSON şemasını kullanır:
PATCH /groups/{group id} { "attributes": { "status": "active" } }
response: 200 OK
PATCH /groups/{group id} { "attributes": { "status": "deleted" } }
response: 406 Not Acceptable
Yan etkileri olmadan kaynağı değiştirmek PUT kullanın.
PUT /groups/{group id}
Grubun tamamını değiştirmek isterseniz. Bu, sunucunun aslında yeni bir grup oluşturduğu ve eskisini attığı anlamına gelmez, örneğin kimlikler aynı kalabilir. Ama müşteriler için, PUT budur olabilir müşteri o sunucunun verdiği yanıta bağlı olarak tamamen yeni bir öğe, alır üstlenmesi gerektiğini: demek.
İstemci, bir PUT
istek durumunda, yeni bir öğe oluşturmak için gereken tüm verilere sahip olarak her zaman kaynağın tamamını göndermelidir: genellikle POST oluşturma ile aynı veriler gerekir.
PUT /groups/{group id} { "attributes": { "status": "active" } }
response: 406 Not Acceptable
PUT /groups/{group id} { "attributes": { "name": .... etc. "status": "active" } }
response: 201 Created or 200 OK, depending on whether we made a new one.
Çok önemli bir gereklilik PUT
idempotenttir: bir Grubu güncellerken (veya bir aktivasyonu değiştirirken) yan etkilere ihtiyacınız varsa, kullanmalısınız PATCH
. Bu nedenle, güncelleme, örneğin bir posta göndermekle sonuçlandığında, kullanmayın PUT
.