Bir REST API oluşturma aşamasındayım ve şu anda aşağıdaki sorunla karşılaşıyorum:
Foo
ilk kaynaktır. CRUD işlemleri/foo/
URI aracılığıyla uygulanabilir .Bar
ikinci kaynaktır. CRUD işlemleri/bar/
URI aracılığıyla uygulanabilir .- Her
Foo
biri sıfır veya bir ile ilişkilidirBar
.Bar
Bir alt kaynak olarak davranmamamınFoo
nedeni, aynıBar
örneğin mutipleFoo
s arasında paylaşılabilmesidir . Bu yüzden, bunun yerine bağımsız bir URI ile erişmenin daha iyi olduğunu düşündüm/foo/[id]/bar
.
Benim sorunum önemli bir durumda, bir Foo
örnek isteyen istemciler de ilişkili Bar
örnek ile ilgileniyor olmasıdır . Şu anda bu, bir yerine iki sorgu gerçekleştirmeleri gerektiği anlamına gelir. Her iki nesneyi tek bir sorgu ile almak için izin veren bir yol tanıtmak istiyorum, ama bunu yapmak için API modellemek için nasıl bilmiyorum. Şimdiye kadar ne buldum:
- Ben buna benzer bir sorgu parametresi tanıtmak olabilir:
/foo/[id]?include_bar=true
. Bu yaklaşımla ilgili sorun, yanıtın kaynak gösteriminin (örn. JSON yapısı) farklı görünmesi gerektiğidir (örn{ foo: ..., bar: ... }
. Sadece serileştirilmiş yerine bir kapFoo
), bu daFoo
kaynak uç noktasını "heterojen" kılar . Bunun iyi bir şey olduğunu düşünmüyorum. Sorgulama yapılırken/foo
, sorgu parametrelerinden bağımsız olarak istemciler her zaman aynı kaynak gösterimini (yapısını) almalıdır. - Başka bir fikir, yeni bir salt okunur uç nokta eklemektir
/fooandbar/[foo-id]
. Bu durumda, böyle bir temsili iade etmek sorun değil{ foo: ..., bar: ... }
, çünkü o zamanfooandbar
kaynağın sadece "resmi" temsili . Ancak, böyle bir yardımcı uç noktasının gerçekten RESTful olup olmadığını bilmiyorum (bu yüzden sorunun başlığına "can" yazdım. Elbette teknik olarak mümkün, ama iyi bir fikir olup olmadığını bilmiyorum).
Ne düşünüyorsun? Başka olasılıklar var mı?
Bar
, a ile ilişkilendirilmeden var olamaz Foo
. Ancak, yukarıda yazdığım gibi, birden çok Foo
kişinin aynı şeyi paylaşması mümkündür Bar
. Foo
Bir Bar
ilişkili olmadan bir oluşturmak mümkün olmalıdır , bu yüzden Bar
ebeveyn olarak ele alınması gerektiğini düşünmüyorum .