我已经创建了一个API。GETting我的资源提供:
{
category: {
id: "517ed1bff929f90e1152ad43",
name: "Test category"
},
cost: "Free",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras tincidunt augue in mi scelerisque quis condimentum velit sollicitudin. Nam eleifend posuere semper. Pellentesque non nulla et arcu ornare lacinia. Donec quis dui at velit placerat volutpat vitae sit amet lorem. ",
genders: [
"M",
"F"
],
id: "517ed1bff929f90e1152ad44",
tags: [
{
id: "517ed1bff929f90e1152ad3f",
name: "testing",
resource_uri: "/api/v1/interests/517ed1bff929f90e1152ad3f/"
},
{
id: "517ed1bff929f90e1152ad41",
name: "coding",
resource_uri: "/api/v1/interests/517ed1bff929f90e1152ad41/"
}
],
location: {
lat_lng: [
51.500705,
-0.124575
],
locality: "London",
name: "Big Ben"
},
resource_uri: "/api/v1/events/517ed1bff929f90e1152ad44/",
slug: "test-event1",
title: "Test event1"
}我希望允许用户以列表的形式提交标签,例如“测试”,“编码”,“python”,而不是要求他们提交对象-这是因为如果没有标签对象存在,我会创建一个。
我怎么才能做到这一点呢?它违反了REST原则。
发布于 2013-06-11 06:19:12
我做了类似的事情,只是我让GET和POST都使用名称而不是URI。这可能在内部更一致。
如果你只想让POST/PUT使用这个名字,你应该能够定义hydrate_tags method of your resource。如果不让客户端使用urls,而只允许使用名称,那么这样的操作可能会起作用:
def hydrate_tags(self, bundle):
new_list = []
for item in bundle:
new_list.append(TagResource.build_bundle(data={name: item.data}))
return new_list请注意,上面的内容是未经验证的--我没有检查hydrate_tags是否应该返回一个列表或包。
https://stackoverflow.com/questions/16305984
复制相似问题