c# – WebAPI2中正确的RESTful实现是什么?

基本上我发现了关于这个主题的废话,但没有一个能说服我什么是正确的.更具体地说,我有以下问题:

单数或复数或两者兼而有之

>甚至有正确和错误的方式吗?

标准和惯例存在是有原因的,我不相信我会满足 – 这只是一个品味问题.没有任何指南或标准吗?没有权力完成Fieldings工作?

IHttpActionResults返回什么?它们应该包含什么?

>获取 – 返回Ok();
> Post – return Created();
> Put – return(Put?Ok?)
>删除 – 返回(删除?好吗?)

在Created(位置)返回什么?

假设Controller路由是’api / v1 / model’,它应该是

>’/ {id}’?
>’api / v1 / model / {id}’?
>’http://www.mywebapi.com/api/v1/model/ {id}’?

我问这些问题是因为我经常遇到如何最好地实现API的冲突.

最佳答案 问:单数或复数或两者兼而有之

绝不使用两者.使用任何一个.使用名词而不是动词.

不要使用动词:

/getAllCars
/createNewCar
/deleteAllRedCars

不要混淆单数和复数名词.保持简单,只使用复数名词来表示所有资源.

/cars instead of /car
/users instead of /user
/products instead of /product

现在,如果您在下面看到,它将更有意义:

GET /tickets – Retrieves a list of tickets
GET /tickets/12 – Retrieves a specific ticket
POST /tickets – Creates a new ticket
PUT /tickets/12 – Updates ticket #12
PATCH /tickets/12 – Partially updates ticket #12
DELETE /tickets/12 – Deletes ticket #12

如果资源与另一个资源相关,则使用子资源.

GET /cars/711/drivers/ Returns a list of drivers for car 711

问:在Created(位置)返回什么?

200 OK – 响应成功的GET,PUT,PATCH或DELETE.也可以用于不会导致创建的POST.

201 Created – 对POST的响应,导致创建.应该与Location header结合指向新资源的位置

提供上一个问题的清晰度,我会相应地更新我的答案.

REST没有明确的标准,每个人都根据自己的需要使用最佳实践.但是,我建议你从apigee.com浏览这个PDF,其中列出了REST API的最佳实践以及每个大型播放器,即Facebook,Twitter等使用的内容.

点赞