REST modeline kaynakları yerleştirmenin doğru yolu nedir?


14

Hizmet bir REST API tasarlıyorum ve kaynakları yuvalamak için uygun bir şekilde takılıp var.

Kaynaklar: ortaklar, biletler, ayarlar

Kaynaklar arasındaki bağlantılar:

  • eşin birçok bileti var,
  • iş ortağı ayarlara sahip,

İş mantığı:

  • tüm ortakları anonim kullanıcı olarak listeleyebilirsiniz,
  • anonim kullanıcı olarak belirtilen iş ortağına yeni bilet ekleyebilirsiniz,
  • sadece iş ortağı biletlerini listeleyebilir,
  • biletlerini yalnızca iş ortağı değiştirebilir,
  • ayarları yalnızca iş ortağı listeleyebilir,
  • yalnızca iş ortağı ayarları değiştirebilir,

Şimdiye kadar ne yaptım:

Ortak kaynakları

GET / ortakları - tüm ortakları listele
GET / ortakları /: id - ortağın ayrıntılarını göster: id parametresi
GET / ortakları /: partner_id / tickets - ortak biletlerinin listesi
GET / ortakları /: partner_id / tickets /: id - ayrıntılar belirtilen iş ortağının biletinin
POST / ortakları /: partner_id / tickets - yeni bilet
PUT / partnerleri kaydeder :: partner_id / tickets /: id - id parametresi
GET / partners /: partner_id / settings - iş ortağı ayarlarını
PUT listeler / partners /: partner_id / settings - iş ortağının ayarlarını güncelleyin

Sorun / Soru

İç içe kaynakları (biletler, ayarlar) kaynakları ayırmak veya bunları ayrı kaynaklar olarak çoğaltmak için uygun bir yol olabilir mi?

Örneğin

GET / bilet /: id
POST / bilet
PUT / bilet /: id

GET / ayarlar
PUT / ayarlar

Yanıtlar:


8

HATEOAS :

GET /partners/:partner_id/tickets - iş ortağının biletlerinin listesi, yani URI'lerin bir listesini döndürür, muhtemelen formun /tickets/:id

GET /partners/:partner_id/tickets/:id - gerekli değil

POST /partners/:partner_id/tickets - bir bilet oluşturur ve ortakla ilişkilendirir, formun yeni URI'sı ile 201 döndürür /tickets/:id


2
Şimdi daha fazla anlıyorum. Çok teşekkürler :) Peki ya performans? Bu durumu varsayalım: bazı kısa bilgiler içeren biletler listesi oluşturmak istiyorsunuz. Ortak için bilet listesi talep etmelisiniz ve bundan sonra her bir bileti bireysel olarak talep etmelisiniz. Haklı mıyım?
Przemek

iyi evet. veya /partners/:partner_id/ticketslistenin yalnızca biletin standart URI'sı için değil, her bilet için bazı yararlı veriler içermesini sağlayabilirsiniz . Örneğin, JSON'da [{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}], istemci hemen bazı tabloları gösterebilir ve ekstra manipülasyon için tam bilet kaynaklarını GET / PUT yapabilir.
Javier

Tamam, açık.
Przemek

BTW. / Partners /: partner_id / tickets için dokümanlar iş ortağı veya bilet kaynakları bölümünde sağlanmalı mı?
Przemek

@Javier DELETE ne olacak? DELETE /tickets/:id?
Mengdi Gao
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.