REST'te varlık ilişkisi oluşturma: Bir alt kimliğe posta göndererek ebeveyn oluşturabilir miyim?


9

Şu anda klasik müşteri verilerine erişmek için bir REST API tasarlıyoruz. API'deki öğelerden biri kullanıcının varlıklarıdır. Varlıklar belirli bir hizmet kapsamında eklenir. Arka uç API'si yalnızca belirli bir hizmet altındaki bir kullanıcıya öğe ekleyecektir. Dolayısıyla, Kullanıcı - Varlık ilişkisi yoktur, ancak bir Kullanıcı - [Hizmet] - Varlık ilişkisi vardır.

URI'lerimiz şöyle görünecek:

/users/{id}/assets/{id}/services/{id}

API'nın kullanımı, yeni bir giriş oluşturmak için varlık kimliğini ve hizmet kimliğini bilir. Mücadele ettiğimiz şey bu ilişkinin yaratılması.

Basit bir yol, tüm ilişkiyi /users/{id}/assets/

POST /users/{id}/assets    
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}

ancak daha sonra URI'nin gösterebileceği gibi gerçekte bir varlık oluşturmuyoruz, ancak bir varlık-hizmet ilişkisi kuruyoruz.

Alternatif olarak, ilişkiye hitap eden URI'ye POST'luk etmeyi düşünüyoruz, şöyle:

POST /users/{id}/assets/{id}/service/{id}
{attribute1:"{var}", attribute2:"{var}"}

Ancak bu durumda, kaynak yolu /users/{id}/assets/{id}POST'tan önce mevcut olmayacak ve bir yan etki olarak oluşturulacaktır.

Henüz mevcut olmayan bir kaynak yoluna POST 'a izin veriliyor mu?

Düşünceleriniz için teşekkürler,

Gerard.

Yanıtlar:


3

Bir kullanıcı var olmayan bir ilişkiye her yayın gönderdiğinde, bunu yayının bir parçası olarak oluşturacağınızı öneriyorsunuz gibi görünüyor.

Bu tür bir erişime yönelik oluştur modelinin geçerli, kabul edilebilir bir geliştirme modeli olup olmadığını soruyorsanız, cevap evettir - hem geçerli hem de oldukça yaygın bir modeldir.


1
Cevap için teşekkürler. Başvurabileceğim bazı referanslara işaret eden var mı?
maasg

2

Burada birden fazla nokta var: Birincisi: Bu kaynak zaten mevcut olabileceğinden yeni bir kaynak oluştururken kimliği koymamalısınız veya kimliği oluşturmak için belirli bir teknik kullanan sistem olabilir ve sizinkini kendiniz kullanmaya zorlayabilirsiniz. oluşturulan kaynak ile geri besleme almak için, kaynak oluşturma durumunda kimliğin sistem tarafından konum başlığı özelliğinin ayarlanması gerektiğini önerin.

İkincisi: JSON'unuz doğru değil, kaynak nesnesi içinde başka bir nesne olarak hizmetle uğraşmanız gerekiyor, ayrıca kaynak URI hizmeti "s" de onunla dizi olarak uğraşmanız gerekiyor.

POST /users/{id}/assets    
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}

olmalı:

POST /users/{id}/assets    
{services:[{ attribute1:"var", attribute2:"var"}]}

Eğer bu şekilde kullanacaksan

Üçüncüsü: Tasarım önerisi için bu yolu kullanmayı tercih etmiyorum, bu durumda başarısız olursa, varlık veya hizmet oluştururken başarısız olduğunu nasıl bilebilirsiniz,


0

İşte farklı bir düşünce dizisi:

POST /relationships
{ relationship:${id}, asset:{id}, service:{id}, user:{id}, data:"some data" }

Bu şekilde ilişkileri varlık, hizmet ve kullanıcı arasında üç yönlü bir bağlantı olarak savunuyorsunuz ve herhangi bir hiyerarşik ilişki ima etmiyorsunuz

Daha sonra belirli bir ilişkiyi şu yollarla alabilirsiniz:

GET /relationships?id="2144321"

veya bir ilişki alt kümesini şu yolla arayın:

GET /relationships?user="43434"

veya

GET /relationships?asset="12433"

Orijinal yol yanlış değildir, ancak bu yaklaşım size kimlerin kullanıldığı konusunda daha fazla esneklik verebilir.

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.