RESTful bir arayüz tasarlarken, talep tiplerinin anlamları tasarım için hayati önem taşır.
- GET - Koleksiyon listesi veya alma elemanı
- PUT - Koleksiyon veya öğeyi değiştir
- POST - Koleksiyon veya öğe oluştur
- DELETE - Eh, erm, koleksiyon veya öğeyi sil
Ancak, bu "arama" kavramını kapsamıyor gibi görünmüyor.
Örneğin, bir İş Arama sitesini destekleyen bir web servisleri takımı tasarlarken aşağıdaki gereksinimlere sahip olabilirsiniz:
- Bireysel İş İlanını Alın
- GET için
domain/Job/{id}/
- GET için
- İş İlanı Oluştur
- POST için
domain/Job/
- POST için
- İş İlanını Güncelle
- PUT için
domain/Job/
- PUT için
- İş İlanını Sil
- SİL için
domain/Job/
- SİL için
"Tüm İşleri Al" da basittir:
- GET için
domain/Jobs/
Ancak, "arama" işi bu yapıya nasıl giriyor?
Bunun bir "liste koleksiyonu" varyasyonu olduğunu iddia edebilir ve aşağıdaki gibi uygulayabilirsiniz:
- GET için
domain/Jobs/
Ancak, aramalar karmaşık olabilir ve uzun bir GET dizesi üreten bir arama yapmak tamamen mümkündür. Yani, burada bir SO sorusunu referans alarak , yaklaşık 2000 karakterden daha uzun GET dizelerini kullanan sorunlar var.
Bir örnek, yönlü bir aramada olabilir - "iş" örneğine devam ediyor.
Yönleri aramaya izin verebilirim - "Teknoloji", "İş Unvanı", "Disiplin" ve serbest metin anahtar kelimeler, iş yaşı, yer ve maaş.
Akıcı bir kullanıcı arayüzü ve çok sayıda teknoloji ve iş başlığıyla, bir aramanın çok sayıda faset seçimini kapsayabileceği mümkündür.
Bu örneği işlerden ziyade özgeçmişlere yönlendirin, hatta daha fazla faset getirin; seçili yüz fasetli bir aramayı, hatta her biri 50 karakter uzunluğunda olan sadece 40 fasetli bir aramayı kolayca hayal edebilirsiniz (örneğin, İş Başlıkları, Üniversite İsimleri, İşveren İsimleri).
Bu durumda, arama verilerinin doğru bir şekilde gönderilmesini sağlamak için bir PUT veya POST taşımak istenebilir. Örneğin:
- POST için
domain/Jobs/
Fakat anlamsal olarak bu bir koleksiyon oluşturma talimatıdır.
Sen olabilir ayrıca bir aramanın oluşturulması olarak bu ifade edeceğiz ki:
- POST için
domain/Jobs/Search/
veya (aşağıda burninggramma tarafından önerildiği gibi)
- POST için
domain/JobSearch/
Anlamsal olarak mantıklı görünebilir, ancak aslında hiçbir şey oluşturmuyorsunuz, veri talebinde bulunuyorsunuz.
Bu nedenle, anlamsal olarak bir GET'dir , ancak GET'in ihtiyacınız olanı desteklemesi garanti edilmez.
Öyleyse, soru şu - Mümkün olduğunca RESTful tasarıma sadık kalmaya çalışırken, HTTP'nin sınırları dahilinde kalmamı sağlarken, bir arama için en uygun tasarım nedir?
domain/Jobs?keyword={keyword}
. Bu benim için iyi çalışır :) Umarım,SEARCH
fiil standart hale gelecektir. programmers.stackexchange.com/questions/233158/…