【问题标题】:Good Restful design: different payload for different accounts for same url良好的 Restful 设计:相同 url 的不同帐户的不同负载
【发布时间】:2010-10-15 00:00:10
【问题描述】:

如果一个 url 根据所使用的基本身份验证接受不同的有效负载,这是否被认为是糟糕的设计?例如:

http://localhost/userA PUT by userA is allowed up pass XML_A but

http://localhost/userA PUT by adminA is allowed up pass XML_B which is XML_A plus more.

换句话说,它是相同的资源,但可以更新的内容取决于提供的凭据。

我见过关于返回数据的讨论,但关于请求有效负载的讨论不多。 (不确定是否会被视为不同)谢谢

更新

根据 Darrel Miller 的信息,以下是更好的设计吗?

GET /{Username}       readonly resource returns different payload based off of rights
GET /{Username}/UpdInfo  returns only updatable info (subset of GET /{Username})
PUT /{Username}/UpdInfo  updates info 1 to 1 from the GET /{Username}/Info

GET /admin/{Username}/UpdInfo returns updatable info (larger subset of GET /{Username})
PUT /admin/{Username}/UpdInfo updates info 1 to 1 from the GET /admin/{Username}/Info

【问题讨论】:

    标签: rest restful-authentication basic-authentication payload


    【解决方案1】:

    我看到的问题是 PUT 方法替换了目标资源的全部内容。例如,如果发生以下序列,

    PUT /UserA  with  XML_B
    
    PUT /UserA with XML_A
    
    GET /UserA returns XML_A
    

    UserA 不再包含 XML_B 中包含的额外信息。

    它认为您最好将两组不同的信息表示为不同的资源:

    GET /admin/UserA
    
    PUT /admin/UserA with XML_B
    
    GET /UserA
    
    PUT /UserA with XML_A
    

    【讨论】:

    • hmm.. 我唯一的困惑是 XML_B 派生自 XML_A。所以我的想法是 UserA 访问 GET /UserA 并看到 XML_A 更改并使用 XML_A 执行 PUT /UserA。 AdminA 出现并执行 GET /UserA 并看到 XML_B(即 XML_A 加上一些额外的字段)并使用 XML_B 执行 PUT /UserA。如果 UserA 调用 GET /UserA 他们将看到 XML_A (这是 XML_B 但“投射”到 XML_A 这是受限视图)。
    • 我用备用网址布局更新了我的问题。请让我知道你的想法
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多