我们有一个看起来像这样的模型
Login <- Email Addresses <- Person -> Teen
一个存储过程,它从青少年中获取一些属性,一些来自人,一些来自Login,并创建一个新的青少年,返回一个人实体。
从经典的RPC角度来看,这很容易......只需公开方法InsertTeen
并让它调用存储过程。
我一直试图围绕将URL作为我的资源(名词)的RESTful想法,并且唯一的行动是HTTP动作(动词)。显然,像/api/InsertTeen
这样的网址根本不是RESTful。
但在这里我并没有处理任何特定的资源。
我唯一可以做的就是公开像insertTeenRequest
这样的资源。
关于如何做到这一点还有其他想法吗?我是不是一个“狂热者”?
答案 0 :(得分:2)
如果您想要真正的REST,那么在这种情况下您应该对API使用多个请求。例如,首先使用POST创建Teen
到/ api / teens /,然后使用POST创建Person
到/ api / persons /等等。
答案 1 :(得分:0)
我自己很熟悉REST,但我的想法是,在这里,您将使用“POST”与请求正文,其中包含创建“Teen”所需的数据,无论您使用何种格式,通常是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 POST的/api/teens
会插入一个新的青少年。为了完善CRUD操作,/api/teens/{id}
使用HTTP GET将返回特定的Teen,/api/teens/{id}
使用HTTP PUT将使用请求正文中传递的值更新Teen,并调用/api/teens/{id}
使用HTTP DELETE将删除指定的Teen。
修改强>
再次阅读你的问题,我可能会误解。如果您不是将“青少年”视为资源,而只是“人”,那么我会考虑使用HTTP POST /api/people
,并根据请求正文中传递的值,做适当的事情。存储那个'人'。因此,如果请求包含“青少年”值,请调用创建“青少年”的存储过程并返回“人物”。
HTH