SORU
4 Ocak 2010, PAZARTESİ


Anlayış DİNLENME: Fiiller, Hata Kodları ve Kimlik Doğrulama

Bir takip this question () bir PHP tabanlı web uygulamaları varsayılan işlevler, veritabanı ve CMS etrafında API sarmak için sabırsızlanıyorum.

Etrafına bakındı ve birkaç "" çerçeveler. iskelet buldum Çok hafif olduğu için benim soru cevapları ek olarak, orada Tonic ben gibi bir DİNLENME çerçeve.

Sadeliği için en iyisi DİNLENMEK istiyorum, ve API bir mimari oluşturmak istiyor. Temel ilkeler etrafında başımı almak için çalışıyorum ve henüz tam olarak anlamış değilim. Bu nedenle, bir dizi soru.

1. Anladığım haksız mıyım?

Bir kaynak var "deyin. kullanıcılar Yani URI gibi bir dizi olabilir:

/api/users     when called with GET, lists users
/api/users     when called with POST, creates user record
/api/users/1   when called with GET, shows user record
               when called with PUT, updates user record
               when called with DELETE, deletes user record

bu Dinlendirici bir mimarisi şimdiye kadar doğru bir temsilidir?

2. Tümleci ihtiyacım var

Oluşturma, Güncelleme ve Silme yeterli teoride olabilir ama pratikte çok fazla fiiller için ihtiyacım olacak. Bu şeyler olduğunun farkına vardımolabilirgüncelleme isteği gömülü, ama özel dönüş kodları alabilir belirli eylemleri ve her bir eylem içine atmak istemem.

Kullanıcı örnek olarak akla gelen bazıları şunlardır:

activate_login
deactivate_login
change_password
add_credit

ne kadar Dinlendirici bir URL mimarisinde bu gibi eylemleri ifade eder?

İçgüdülerim çağır gibi bir URL yapmak olurdu

/api/users/1/activate_login 

ve durum kodu döner.

HTTP fiilleri kullanma fikri, ama sapma. Ne düşünüyorsun?

3. Nasıl hata mesajları ve kodları geri dönün

DİNLENME güzelliği büyük bir kısmı standart HTTP yöntemlerin kullanımı kaynaklanıyor. Bir hata, 3xx,4xx ve 5xx hata durum kodu ile ilgili bir başlık ben yayarlar. Ayrıntılı hata açıklaması için, vücudun (değil mi?) kullanabilirsiniz. Şimdiye kadar çok iyi. Ama ne iletmek için bir yol olabilirözel hata koduneyin yanlış gittiğini açıklayan daha detaylı ("veritabanına bağlantı kurulamadı" ya da "veritabanı giriş yanlış")? örneğin Eğer ileti gövdesi boyunca içine koydum, sonra ayrıştırmak için var. Bu tür şeyler için standart bir başlık var mı?

4. Nasıl kimlik doğrulaması yapmak

  • API anahtarı kimlik doğrulaması aşağıdaki GERİSİ ilkeler neye benzerdi?
  • GERİSİ bir istemci, geri KALAN ilkesinin açık bir ihlali olduğunu dışında doğrulanırken oturumları kullanarak karşı güçlü noktaları var? :) (sadece yarısı şaka burada, oturum tabanlı kimlik doğrulaması Peki benim mevcut altyapı ile oynayacaktı.)

DÜZENLEME:Teşekkür için tüm senin büyük tepkiler çocuklar. Gidecek onları yarın ya da öbür gün.

CEVAP
7 Ocak 2010, PERŞEMBE


Bu soru gün geç bir çift gördüm, ama bazı bilgiler eklemek hissediyorum. Bu Dinlendirici bir girişim doğru yararlı olabilir umuyoruz.


Nokta 1: anlayış, haksız Mıyım?

Çok iyi anladınız. Çok Dinlendirici bir mimariye doğru bir temsilidir. Wikipedia aşağıdaki matris isimler ve fiiller tanımlamada çok yararlı olabilir:


Bir ile uğraşırkenToplamaURİ gibi:http://example.com/resources/

  • OLSUN: Koleksiyon üyeleri, ayrıca navigasyon için üye URI ile tam listesi Örneğin, tüm Satılık Arabalar listesi.

  • KOYUN: Anlam tanımlanan "başka bir toplama ile tüm koleksiyonu" değiştirin.

  • POST: KİMLİĞİ otomatik olarak toplama tarafından atanmış olduğu koleksiyonda yeni bir girdi oluşturun. KİMLİĞİ oluşturulan genellikle veri bu işlem tarafından döndürülen bir parçası olarak dahil edilmiştir.

  • SİL: Anlam tanımlanan "tüm koleksiyonu sil".


Bir ile uğraşırkenÜyeURİ gibi:http://example.com/resources/7HOU57Y

  • OLSUN: Koleksiyon uygun bir MIME türü olarak ifade edilen ele üyenin temsilini almak.

  • KOYUN: Koleksiyon hitap üye güncelleme veya belirtilen KİMLİK oluşturun.

  • POST: Kendi başına bir koleksiyon olarak ele üyenin davranır ve yeni bir sertifika oluşturur.

  • SİL: Koleksiyon ele üyenin silin.


Nokta 2: Daha fiiller ihtiyacım var

Tümleci var mı acaba, genel olarak, ne zaman gerçekten kaynaklarınızı yeniden tanımlanması gerekiyor. Geri KALAN her zaman kaynakların bir koleksiyon üzerinde bir kaynak ya da hareket ettiğinizi hatırlayın. Kaynak olarak ne seçerseniz seçin API tanımı için oldukça önemlidir.

/Devre Dışı Bırak Giriş Etkinleştirin: Eğer yeni bir oturum oluşturmak istiyorsanız, o zaman" kaynak. "oturum düşünebilirsiniz Yeni bir oturum oluşturmak için kullanın vücutta kimlik bilgileri ile http://example.com/sessions/ POST. http://example.com/sessions/SESSION_ID KOY veya SİL (belki bir oturum geçmişini tutmak niyetinde olmadığını bağlı olarak) kullanım süresi dolacak.

Şifre Değiştir:Bu sefer kaynak "kullanıcı". Vücudunda eski ve yeni şifreler http://example.com/users/USER_ID KOYMAK gerekir. "Kullanıcı" kaynak ve değiştirmek bir şifre sadece bir güncelleştirme isteği. davranıyorsun İlişkisel bir veritabanında UPDATE deyimi için oldukça benzer.

Düşüncem bir arama yapmak olacaktır gibi bir URL için /api/users/1/activate_login

Bu çok temel bir DİNLENME kurallarına aykırı: HTTP fiilleri doğru kullanım. Herhangi bir isteği hiçbir zaman herhangi bir yan etki bırakmalı.

Örneğin, bir isteği hiçbir zaman veritabanında bir oturum oluşturmak, yeni bir Oturum KİMLİĞİ ile bir çerez dönmek, ya da sunucu üzerinde herhangi bir iz bırakıyor olmalı. Fiil veritabanı motoru SEÇİN deyimi gibidir. Fiil ile herhangi bir isteğine yanıt gibi statik bir web sayfasını istediğinde aynı parametrelerle istenen zaman mümkün önbellek, unutmayın.


Hata iletileri geri dönmek için Nasıl ve kodları . nokta 3:

Hata kategorileri olarak 4 XX veya 5xx HTTP durum kodları düşünün. Vücutta hatayı daha ayrıntılı olabilir.

Veritabanına Bağlanmak için başarısız oldu:/Yanlış Veritabanı Oturum Açma: Genel olarak, bu tür hatalar için 500 bir hata kullanmalısınız. Bu sunucu tarafında bir hata. Müşteri yanlış bir şey yapmadı. 500 hataları normal kabul edilir "". yinelenebilir yani istemci aynı isteği yeniden deneyin ve başarılı olmak için bekleyebilirsiniz sunucu sorunları çözülmüş bir kere. Müşteri bize bir bağlam sağlamak için mümkün olacak, böylece vücudun detaylarının insanlar belirtin.

Hataları diğer Kategori Genel olarak müşteri yanlış bir şey mi yaptım gösteren 4 XX aile, olacaktır. Özellikle, hataları bu kategori sürekli başarısız olmaya devam edecektir çünkü bu istek yeniden denemek için ihtiyaç vardır hayır normalde istemci gösterir. yani istemci bu isteği yeniden denemeden önce bir şeylerin değişmesi gerekiyor. Örneğin, "ya da "İstek" (HTTP 400) hatalar bu kategoriye giriyor. Bozuk" (HTTP 404 bulunamadı) Kaynak değil


Kimlik yapmak için Nasıl . nokta 4:

Olarak işaret noktası 1 kullanıcı doğrulama yerine, bir oturum oluşturma hakkında düşünmek isteyebilirsiniz. Yeni bir "Oturum KİMLİĞİ", birlikte uygun HTTP ile (200: Erişim İzni veya 403: Erişim Engellendi) durum kodu döndürülür

Sonra sunucu Dinlendirici soruyor olacak: "beni ALIN kaynak bu Oturum için teşhis EDEBİLİR MİSİN?".

Yok authenticated modu - DİNLENME vatansız: oluşturduğunuz bir oturum, sizden sunucuya vermek kaynaklarını kullanarak bu Oturum KİMLİĞİ gibi bir parametre ve çıkış bırak, yoksa sona oturumu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012
  • Shaollin Animes

    Shaollin Ani

    19 HAZİRAN 2013