Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命名RESTful路径_C#_Java_Web Services - Fatal编程技术网

C# 命名RESTful路径

C# 命名RESTful路径,c#,java,web-services,C#,Java,Web Services,我正在创建一个web服务,我有一些关于路径名的问题。如何在RESTful Web服务中指定资源上的操作 例如:测验资源。你有正常的CRUD动作,你还想做一些测验。例如生成新的测验。这是一种行动。您是否使用类似于/quick/top5或/quick?type=top5或什么的路径 我不理解在创建RESTful服务时如何编写对资源执行操作的路径 这真的取决于你-RESTful模式不规定命名约定 这对你有帮助吗 只要让路线合理:例如测验/表演/{id}、测验/排名/{number}等 编辑:添加关于路

我正在创建一个web服务,我有一些关于路径名的问题。如何在RESTful Web服务中指定资源上的操作

例如:测验资源。你有正常的CRUD动作,你还想做一些测验。例如生成新的测验。这是一种行动。您是否使用类似于
/quick/top5
/quick?type=top5
或什么的路径


我不理解在创建RESTful服务时如何编写对资源执行操作的路径

这真的取决于你-RESTful模式不规定命名约定

这对你有帮助吗

只要让路线合理:例如测验/表演/{id}、测验/排名/{number}等

编辑:添加关于路由操作命名的注释的答案,取自Rails惯例。
这是你喜欢的。我个人喜欢last.fm API的工作方式:

但是如果你想寻找一些好的标准,请看以下帖子:


我建议您阅读一下类似问题的答案


一般来说,你应该考虑API的哪些部分应该通过GET,哪些是通过POST获得的。通过GET获得的资源通常应使用名词来描述,而操作(如可能发布测验答案)应通过POST(或删除,可能)使用动词来描述,可能是在资源的一个名词名称之后进行操作。

如本文所述,最好对其余URL使用类似目录的结构

/{type}/{operation}/{param1}/{param2}这样的URL…

看起来更直观、更容易理解(如果参数太多,可以将其作为经典的
?=
传递)


因此,在您的情况下,它可以是
/quitch/top/5
,或者如果明天它应该是top 100,那么它可以被重用为
/quitch/top/100
URL标识您的对象HTTP方法指定服务器应在对象上执行的操作

例如:

/quiz/top5
  • HTTP GET:客户端请求查看测验top5,这是否意味着创建一个新测验?或者这意味着要显示一个现有的?这取决于您(GET的约定是在不改变服务器状态的情况下请求对象)
  • HTTP POST:客户端请求持久化更改

我推荐这本电子书的作者是:

按照他们的建议:

  • 实用的RESTful设计的首要原则是:保持简单 事情很简单
  • 保持您的基本URL简单直观
关于您想要的顶级列表,可能有一个类似于他们在“分页和部分响应”部分中概述的解决方案,可以满足您的需要:

quizzes/top?limit=5


使用此选项,您可以首先使用默认值(5或10个项目)创建一个资源
quizs/top
,然后提供分页/更改项目数量的功能

我将使用
/quick/generate/123
作为id
123
我将使用
/quick/{id}
那么如何编写触发资源上“进程”的路径呢?我的意思是像一个动作,而不仅仅是CRUD路径?在另一个答案中,他说应该使用URL来指定对象,而不是动作。嗯……那么您使用“top”指定对象的示例呢?看,这实际上取决于您希望应用程序如何工作。。。您希望用户如何与您的API交互?假设有许多不同类型的测验,例如“随机测验”,您将如何为此创建路径?GET
因此,如果你想显示一个名为“随机测验”的测验,你可以做GET/quizes/RandomQuique如果你想创建一个“随机测验”,你可以做一个post to/quizes。前5部分意味着动态处理前5个对象的列表。那么这就适合识别物体了?如果你要遵循电子书中的指导原则,并且有两个基本URL,那么就不要采取行动。您如何获得服务器随机生成的新测验?是否保留/测验用于列出所有测验(集合)?我不是在客户端创建它,我只是想从服务器上生成一个我会选择测验/随机(顺便说一句,我将编辑我的帖子以编写测验复数-测验-正确:-),但你会破坏他们的建议?我想我不会破坏他们的建议(至少,从广义上讲):集合的第一个元素(测验),集合中特定元素的第二个元素(随机=刚刚生成的随机测验)。该资源的特殊之处在于每次从服务器获取时都会发生更改(但当有人读取“random”时很明显)。
+------------+-------------------+--------------+----------------------------------------+------------------+
| Resource   | POST create       | GET read     | PUT update                             | DELETE delete    |
| /quizzes   | Create a new quiz | List quizs   | Bulk update quizs                      | Delete all quizs |
| /quizes/12 | Error             | Show Quiz 12 | If exists update Quiz 12, if not Error | Delete Quiz 12   |
+------------+-------------------+--------------+-----------------------------------------+------------------+