我對REST比較陌生,但我一直在做RESTful應該如何做的功課。現在我正在嘗試爲我的模型創建一個實現JSON + HAL序列化器的RESTful api,這些模型與其他模型有關係。
例模型蟒蛇:使用HAL設計RESTful API - 序列化模型關係
class Category(Model):
name = CharField()
parent = ManyToOneField(Category)
categories = OneToManyField(Category)
products = ManyToManyField(Product)
class Product(Model):
name = CharField()
price = DecimalField()
related = ManyToManyField(Product)
categories = ManyToManyField(Category)
讓我們假設有一類「目錄」與子類「食品」產品「漢堡」和「熱狗」,這都是相關的。
第一個問題。類別和產品應該是資源,所以他們需要一個URI,我應該在模型中實現一個uri字段並將其存儲在數據庫中或以某種方式在運行時計算它,那麼多標識符(URI)又如何呢?
第二個問題。 可發現性,在Hal格式中,應該「GET /」和不同的節點返回以使api容易自我發現。
{
"_links":{
"self":{
"href":"/"
},
"categories":[
{
"href":"/catalog"
}
]
}
}
第三個問題。添加爲屬性,嵌入或鏈接。例如「GET/catalog/food」:
{
"_links":{
"self":{
"href":"/catalog/food"
}
},
"name":"food",
"parent":"/catalog",
"categories":[],
"products":[
"/products/burger",
"/products/hot-dog"
]
}
{
"_links":{
"self":{
"href":"/catalog/food"
},
"parent":{
"href":"/catalog"
},
"categories":[
],
"products":[
{
"href":"/products/burger"
},
{
"href":"/products/hot-dog"
}
]
},
"name":"food"
}
{
"_links":{
"self":{
"href":"/catalog/food"
}
},
"name":"food",
"_embedded":{
"parent":{
"_links":{
"self":{
"href":"/catalog"
}
},
"name":"catalog",
...
},
"categories":[
],
"products":[
{
"_links":{
"self":{
"href":"/products/burger"
}
},
"name":"burger",
...
},
{
"_links":{
"self":{
"href":"/products/hot-dog"
}
},
"name":"hot-dog",
...
}
]
}
}
第四個問題。返回結構時應該多深。例如「GET /目錄
3210
那你是如何最終處理? –