【问题标题】:Pass dictionaries or objects in REST Api calls?在 REST Api 调用中传递字典或对象?
【发布时间】:2012-06-27 08:07:23
【问题描述】:

我正在为我的业务开发一个 REST Api(使用 C#),并试图保持它相当干净和简单。我正在努力的设计决策之一是说你有一个资源 uri:

www.mydomain.com/Api/Orders

因此,要创建一个订单,您需要对这个 uri 进行 POST 并传递以下 json:

{
   "ProductNumber": "12345A",
   "Quantity": 5
   "Cost" : 250.5
   "CustomerId" : "912AFD52-8F2F-43A2-87FF-EB65D0A8FD8C"
   ...etc
}

但在服务器端,我最初认为确保传入的 json 序列化到底层对象模型是一个多么好的主意,然后我可以直接使用该对象。然而,诸如 Id、CreatedOn、ModifiedOn 等问题一直存在问题。

在我的对象模型中,我希望在创建对象时生成 Id,并在将对象插入数据库时​​设置 CreatedOn 等。所以理想情况下,我希望这些属性是只读的,但是如果它们是只读的,那么当 json 序列化为一个对象时,就不会填充 Id。如果不让它们只读,那么可能有人可以在 json 中触发并更改这些属性。

所以我在想我是否最好将 json 序列化为字典,然后创建从字典中提取属性的对象?

说实话,我有点搞混了。

【问题讨论】:

  • 我认为这就是“数据访问层”和“数据访问对象”的用途......在 UI 和数据存储之间进行调解,并具有这些差异。

标签: c# json rest


【解决方案1】:

仅仅因为有人在对您的服务的请求中说了些什么并不意味着您必须这样做。一个简单的方法是创建一个他们可以设置的属性的白名单,并通过对象的键并删除白名单上的所有内容。然后,在其中填写您需要但由服务器生成的值。 (您还应该验证允许的键值的格式是否符合您的预期。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多