2

我们有一个看起来像这样的模型

Login <- Email Addresses <- Person -> Teen

还有一个存储过程,它从 teen 获取一些属性,从 person 获取一些属性,从 Login 获取一些属性,并创建一个新的 teen,返回一个 person 实体。

从经典的 RPC 角度来看,这很容易……只需公开一个方法InsertTeen并让它调用存储过程。

我一直在尝试将 RESTful 理念围绕着将 URL 作为我的资源(名词),而唯一的操作是 HTTP 操作(动词)。显然,像这样的 URL/api/InsertTeen根本不是 RESTful。

但在这里我不是在处理任何特定的资源。

我在这里唯一能做的就是公开像insertTeenRequest.

还有其他关于如何做到这一点的想法吗?我是不是太“狂热”了?

4

2 回答 2

2

如果您想真正实现 RESTful,那么在这种情况下,您应该对您的 API 使用多个请求。例如,首先您Teen使用 POST 创建到 /api/teens/,然后Person使用 POST 创建到 /api/persons/ 等等。

于 2011-05-18T12:20:04.097 回答
0

我自己对 REST 很陌生,但我的想法是,在这里您将使用“POST”和请求的主体,其中包含创建“青少年”所需的数据,无论您使用什么格式,通常是 JSON 或 XML。在这里,我不确定您是否将青少年视为具有附加属性的人,或者青少年是否被建模为实体本身:

<person login="abc" email="abc@foo.com">
   <person-property-1>value1</person-property-1>
   <person-property-2>value2</person-property-2>
   <teen>
      <teen-property-1>value3</teen-property-1>
      <teen-property-2>value4</teen-property-2>
   </teen>
</person>

或者

<teen login="abc" email="abc@foo.com">
   <person-property-1>value1</person-property-1>
   <person-property-2>value2</person-property-2>
   <teen-property-1>value3</teen-property-1>
   <teen-property-2>value4</teen-property-2>
</teen>

关于 URI,我认为这些段应该是名词而不是动词,因为 URI 应该针对资源,/api/teens而不是/api/InsertTeen.

/api/teens使用 HTTP GET 将返回所有青少年的列表,/api/teens使用 HTTP POST 将插入一个新的青少年。为了完善 CRUD 操作,/api/teens/{id}使用 HTTP GET 将返回一个特定的青少年,/api/teens/{id}使用 HTTP PUT 将使用请求正文中传递的值更新一个青少年,并/api/teens/{id}使用 HTTP DELETE 调用将删除指定的青少年。

编辑

再读一遍你的问题,我可能误解了。如果您不将“青少年”视为资源,而仅将“人”视为资源,那么我会考虑/api/people使用 HTTP POST,并根据请求正文中传递的值,做任何适当的事情来存储“人” '。因此,如果请求包含“青少年”值,请调用创建“青少年”并返回“人员”的存储过程。

高温高压

于 2011-05-18T13:29:27.637 回答