首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tastypie: POST和GET资源格式不同的REST API

Tastypie: POST和GET资源格式不同的REST API
EN

Stack Overflow用户
提问于 2013-05-01 01:49:30
回答 1查看 99关注 0票数 2

我已经创建了一个API。GETting我的资源提供:

代码语言:javascript
复制
{
    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原则。

EN

回答 1

Stack Overflow用户

发布于 2013-06-11 06:19:12

我做了类似的事情,只是我让GET和POST都使用名称而不是URI。这可能在内部更一致。

如果你只想让POST/PUT使用这个名字,你应该能够定义hydrate_tags method of your resource。如果不让客户端使用urls,而只允许使用名称,那么这样的操作可能会起作用:

代码语言:javascript
复制
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是否应该返回一个列表或包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16305984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档