标签: http-verbs

在正文或 URI 中指定 REST API PUT 请求的 DTO ID?

对于 REST 和 ASP.NET Web API,即使 DTO 负载(例如 JSON)本身指定了标识符,是否也需要将标识符添加到 PUT 操作方法的路由中?

例如:

public void Put(int id, [FromBody]SomeDto someDto) // someDto has an 'Id' property
Run Code Online (Sandbox Code Playgroud)

ASP.NET Web API 模板包含该id参数,我见过很多这样的例子。

相比之下,是否可以省略该id参数并仍然遵守 REST 准则?例如:

public void Put([FromBody]SomeDto someDto)
Run Code Online (Sandbox Code Playgroud)

rest put http-verbs asp.net-web-api

8
推荐指数
1
解决办法
2179
查看次数

用于从子资源列表中更新/添加/删除项目的 REST 设计

我想知道当您拥有包含子资源列表的资源时哪种是最佳实践。例如,您有资源作者,其中包含姓名、ID、生日和书籍列表等信息。此图书列表仅与作者相关。所以,你有以下场景:

  1. 您想要将一本新书添加到图书列表中
  2. 您想要更新列表中的一本书的名称
  3. 您想要从列表中删除一本书

解决方案1

我搜索了哪个是正确的设计,发现了多种方法。我想知道是否有一个标准的设计方法。我觉得书上的设计说有以下几个方法:

  1. 加上:POST /authors/{authorId}/book/
  2. 更新:PUT /authors/{authorId}/book/{bookId}
  3. 删除:DELETE /authors/{authorId}/book/{bookId}

解决方案2

我的解决方案是只有一个 PUT 方法可以完成所有这三件事,因为书籍列表仅存在于对象作者内部,而您实际上正在更新作者。就像是:

PUT /authors/{authorId}/updateBookList(并将整个更新的书籍列表发送到作者对象内)

我发现我的场景中有多个错误。例如,从客户端发送更多数据、在客户端上有一些逻辑、对 API 进行更多验证以及依赖客户端拥有最新版本的图书列表。

我的问题是:这样做是反模式吗?

情况 1. 在我的情况下,我的 API 使用另一个 API,而不是数据库。使用的 API 只有一种“updateBookList”方法,因此我猜测在我的 API 中复制此行为也更容易。是否也正确呢?

情况 2。但是,假设我的 API 将使用数据库,那么使用解决方案 1 是否更合适?

另外,如果您可以提供一些可以找到类似信息的文章、书籍。我知道这种设计并不是一成不变的,但一些指导方针会有所帮助。(示例:摘自 REST API 设计规则手册 - Masse - O'Reilly)

rest api-design http-verbs restful-url

8
推荐指数
2
解决办法
9579
查看次数

断言请求动词是POST

你如何在PHP请求管道中尽早确保动词是POST并拒绝其他人?

php request http-verbs

7
推荐指数
1
解决办法
4382
查看次数

如何处理REST中的陈旧数据?

例如,如果我调用GET获取项目,使用DELETE删除它并再次获取它,第二个GET应如何工作?

我的意思是,通过正确遵循REST原则,这样做的正确方法是什么,因为GET可以被缓存而且全部?在REST中处理陈旧数据的方法是什么?

rest http http-verbs restful-architecture

7
推荐指数
1
解决办法
903
查看次数

为什么我需要PUT或DELETE Http Verbs?

在MVC 2发布之后,我开始检查并使用新功能,但我无法理解动词PUTDELETE动词的用途.

我搜索了它并阅读了一些文章,但我无法得到它.

DELETE和的主要目的是PUT什么?它们是否比使用GETPOST方法更有优势(即使我可以使用GET和POST处理所有请求)?

asp.net http-verbs asp.net-mvc-2

6
推荐指数
1
解决办法
5245
查看次数

对Http动词感到困惑

我很困惑你何时以及为什么要在REST中使用特定的动词?

我知道基本的东西,比如:

Get -> for retrieval
Post -> adding new entity
PUT -> updating
Delete -> for deleting
Run Code Online (Sandbox Code Playgroud)

这些属性是按照我上面写的操作使用的,但我不明白为什么?如果在REST中的Get方法内部我会添加一个新实体或在POST内部更新一个实体会发生什么?或者可能在DELETE里面我添加一个实体.我知道这可能是一个noob问题,但我需要了解它.这对我来说听起来很混乱.

rest wcf http http-verbs wcf-rest

6
推荐指数
1
解决办法
1679
查看次数

HEAD响应比GET快吗?

我目前正在使用GET获取有关文件的信息,如果我使用HEAD请求重写它会更快吗?原因我在第一次响应后关闭连接.

http-get http-verbs http-head

6
推荐指数
1
解决办法
5235
查看次数

可以将ASMX配置为响应HTTP 1.1 OPTIONS请求吗?

似乎ASMX隐含地不允许OPTIONS动词.我发布这个问题是因为我正在使用POST的jQuery AJAX调用,它首先在发出POST动词**之前向服务器查询可用的OPTIONS.

默认情况下,Web.config将所有谓词映射到旧版ASMX,如此部分配置示例所示,因此所有内容都应正确路由:

<system.webServer>
    <requestFiltering>
        <verbs>
          <add verb="OPTIONS" allowed="true"/>
          <add verb="GET" allowed="true"/>
          <add verb="POST" allowed="true"/>
        </verbs>
    </requestFiltering>

<handlers>
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
       type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Run Code Online (Sandbox Code Playgroud)

但是,对于OPTIONS请求,HTTP响应始终为405.例如,给出以下请求:

OPTIONS http://localhost:35920/MarkupTransfomer.asmx HTTP/1.1
Host: localhost:35920
Access-Control-Request-Method: POST
Run Code Online (Sandbox Code Playgroud)

并始终导致:

HTTP/1.1 405 Method Not Allowed
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Run Code Online (Sandbox Code Playgroud)

jQuery AJAX调用如下所示,来自最近一篇关于使用ASMX的Encosia博客文章的推荐:

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "http://localhost:35920/MarkupTransfomer.asmx",
        data: "{'hi'}",
        dataType: "json"
    });
Run Code Online (Sandbox Code Playgroud)

**注意:我不想将客户端切换为使用GET而不是POST.

摘要问题:是否
可以配置ASP.NET以允许ASMX固有地处理O​​PTIONS请求而不会出现错误?

我考虑过的其他想法

  • 我可以找一种方法告诉你jQuery.ajax(..)不要在POST之前发出OPTIONS动词吗?

  • 如果我不能从传统的ASMX那里得到什么,我还考虑了另外两个潜在的想法:

    1. 实现a System.Web.IHttpHandler,将其粘贴在web.config …

asmx http-verbs iis-7.5

6
推荐指数
1
解决办法
2437
查看次数

用于发送电子邮件的正确 HTTP 动词

对于仅让服务器发送电子邮件而不改变整个 Web 应用程序状态的请求,正确的 http 动词是什么?

我正在开发一个 Rails 项目,我需要以某种方式定义路线:

Rails.application.routes.draw do

  get 'self_emailer/email_me'
  ...

end
Run Code Online (Sandbox Code Playgroud)

routes ruby-on-rails http-verbs

6
推荐指数
1
解决办法
2303
查看次数

Python请求 - 动态传递HTTP动词

有没有办法将HTTP动词(PATCH/POST)传递给函数并动态地将该动词用于Python请求?

例如,我希望这个函数采用一个'动词'变量,该变量只在内部调用,或者= post/patch.

def dnsChange(self, zID, verb):
    for record in config.NEW_DNS:
        ### LINE BELOW IS ALL THAT MATTERS TO THIS QUESTION 
        json = requests.verb(headers=self.auth, url=self.API + '/zones/' + str(zID) + '/dns_records', data={"type":record[0], "name":record[1], "content":record[2]})
        key = record[0] + "record with host " + record[1]
        result = json.loads(json.text)
        self.apiSuccess(result,key,value)
Run Code Online (Sandbox Code Playgroud)

我意识到我不能请求.如上所述''''',它的意思是说明问题.有没有办法做到这一点或类似的东西?我想避免:

if verb == 'post':
    json = requests.post(headers=self.auth, url=self.API + '/zones/' + str(zID) + '/dns_records', data={"type":record[0], "name":record[1], "content":record[2]}
else:
    json = requests.patch(headers=self.auth, url=self.API + '/zones/' + str(zID) + '/dns_records', data={"type":record[0], "name":record[1], "content":record[2]} …
Run Code Online (Sandbox Code Playgroud)

python http request http-verbs

6
推荐指数
2
解决办法
7546
查看次数