标签: rest

会话真的违反了R​​ESTfulness吗?

在RESTful API中使用会话是否真的违反了R​​ESTfulness?我看到很多意见朝着两个方向发展,但我不相信会话是无REST的.在我看来,我的观点是:

  • RESTfulness不禁止身份验证(否则在RESTful服务中几乎没有用)
  • 通过在请求中发送身份验证令牌(通常是标头)来完成身份验证
  • 此身份验证令牌需要以某种方式获取并可能被撤销,在这种情况下需要续订
  • 验证令牌需要由服务器验证(否则它不会是身份验证)

会话如何违反这一点?

  • 客户端,会话使用cookie实现
  • cookies只是一个额外的HTTP标头
  • 可以随时获取和撤销会话cookie
  • 如果需要,会话cookie可以有无限的生命周期
  • 会话ID(身份验证令牌)在服务器端验证

因此,对于客户端,会话cookie与任何其他基于HTTP头的身份验证机制完全相同,除了它使用Cookie头而不是Authorization其他专有头.如果cookie值服务器端没有附加会话,为什么会产生影响呢?只要服务器表现为 RESTful ,服务器端实现就不需要关注客户端.因此,cookie本身不应该使API无REST,而会话只是客户端的cookie.

我的假设是错的吗?什么使会话cookie RESTless

cookies rest session restful-authentication

472
推荐指数
4
解决办法
12万
查看次数

对于webservice响应,text/xml与application/xml之间有什么区别

这是更多的区别一般问题text/xmlapplication/xml.我很擅长编写webservices(REST - Jersey).我一直在制作,application/xml因为它出现在我一直用来学习的大多数教程/代码示例中,但我最近发现text/xml并且想知道它有什么不同以及何时使用它application/xml

xml rest jersey

465
推荐指数
4
解决办法
23万
查看次数

使用JAX-RS和Jersey进行基于REST令牌的身份验证的最佳实践

我正在寻找一种在Jersey中启用基于令牌的身份验证的方法.我试图不使用任何特定的框架.那可能吗?

我的计划是:用户注册我的Web服务,我的Web服务生成令牌,将其发送到客户端,客户端将保留它.然后,对于每个请求,客户端将发送令牌而不是用户名和密码.

我在考虑为每个请求使用自定义过滤器,@PreAuthorize("hasRole('ROLE')") 但我只是认为这会导致很多请求数据库检查令牌是否有效.

或者不创建过滤器并在每个请求中放置一个参数令牌?这样每个API首先检查令牌,然后执行一些东西来检索资源.

java authentication rest jax-rs jersey-2.0

437
推荐指数
2
解决办法
32万
查看次数

带有URL查询参数的HTTP POST - 好主意与否?

我正在设计一个API来通过HTTP,我想知道是否使用HTTP POST命令,但只使用URL查询参数而没有请求体,是一个很好的方法.

注意事项:

  • "良好的网页设计"要求通过POST发送非幂等操作.这是一种非幂等行为.
  • 当URL中存在请求参数时,更容易开发和调试此应用程序.
  • 该API不适合广泛使用.
  • 似乎在没有正文的情况下发出POST请求会花费更多的工作,例如Content-Length: 0必须明确添加标头.
  • 在我看来,没有正文的POST与大多数开发人员和HTTP框架的期望有点相反.

通过URL查询而不是请求体在POST请求上发送参数是否还有其他缺陷或优势?

编辑:正在考虑的原因是操作不是幂等的,并且除了检索之外还有副作用.请参阅HTTP规范:

特别是,已经建立了这样的惯例:GET和HEAD方法不应该具有采取除检索之外的动作的重要性.这些方法应该被认为是"安全的".这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作.

...

方法也可以具有"幂等"的属性(除了错误或到期问题)N> 0个相同请求的副作用与单个请求相同.方法GET,HEAD,PUT和DELETE共享此属性.此外,方法OPTIONS和TRACE不应该有副作用,因此本质上是幂等的.

rest http

434
推荐指数
6
解决办法
36万
查看次数

连字符,下划线或camelCase作为URI中的单词分隔符?

我正在为Intranet应用程序设计基于HTTP的API.我意识到这是一个非常小的问题,在宏观方案中,但是:我应该使用连字符,下划线或camelCase来分隔URI中的单词吗?


以下是我最初的想法:

骆驼香烟盒

  • 如果服务器不区分大小写,则可能出现问题
  • 似乎在查询字符串键(相当广泛使用http://api.example.comSEARCHQUERY = ...),而不是在其他URI部分

连字符号

  • 比其他替代品更美观
  • 似乎广泛用于URI的路径部分
  • 从未在野外见过带连字符的查询字符串键
  • 可能更适合SEO(这可能是一个神话)

下划线

  • 编程语言可能更容易处理
  • 几个流行的API(Facebook,Netflix,StackExchange等)在URI的所有部分都使用下划线.

对于一切我都倾向于下划线.大多数大型玩家使用它们的事实令人信服(参见/sf/answers/42592091/).

api rest url uri restful-url

428
推荐指数
7
解决办法
14万
查看次数

如何设计RESTful搜索/过滤?

我目前正在设计和实现PHP中的RESTful API.但是,我没有成功实施我的初始设计.

GET /users # list of users
GET /user/1 # get user with id 1
POST /user # create new user
PUT /user/1 # modify user with id 1
DELETE /user/1 # delete user with id 1
Run Code Online (Sandbox Code Playgroud)

到目前为止标准相当,对吗?

我的问题是第一个问题GET /users.我正在考虑在请求正文中发送参数来过滤列表.这是因为我希望能够在不获取超长URL的情况下指定复杂的过滤器,例如:

GET /users?parameter1=value1&parameter2=value2&parameter3=value3&parameter4=value4
Run Code Online (Sandbox Code Playgroud)

相反,我希望有类似的东西:

GET /users
# Request body:
{
    "parameter1": "value1",
    "parameter2": "value2",
    "parameter3": "value3",
    "parameter4": "value4"
}
Run Code Online (Sandbox Code Playgroud)

它更具可读性,为您提供设置复杂过滤器的绝佳机会.

无论如何,file_get_contents('php://input')没有返回请求的请求体GET.我也尝试过http_get_request_body(),但我正在使用的共享主机没有pecl_http.不确定它会有所帮助.

我发现了这个问题,并意识到GET可能不应该有一个请求体.这有点不确定,但他们建议不要这样做.

所以现在我不知道该怎么做.你如何设计RESTful搜索/过滤功能?

我想我可以使用POST,但这似乎不太RESTful.

api rest search filter

426
推荐指数
6
解决办法
31万
查看次数

WCF服务的REST/SOAP端点

我有一个WCF服务,我想将它作为RESTfull服务和SOAP服务公开.以前有人做过这样的事吗?

rest wcf soap

420
推荐指数
4
解决办法
26万
查看次数

设置HttpClient的授权标头

我有一个HttpClient,我用它来使用REST API.但是,我在设置Authorization标头时遇到问题.我需要将标头设置为我从执行OAuth请求时收到的令牌.我看到.NET的一些代码表明以下内容,

httpClient.DefaultRequestHeaders.Authorization = new Credential(OAuth.token);
Run Code Online (Sandbox Code Playgroud)

但是,Credential类在WinRT中不存在.任何人有任何想法如何设置授权标头?

c# rest oauth windows-runtime

418
推荐指数
16
解决办法
52万
查看次数

在request.GET中捕获url参数

我正在定义正则表达式以捕获url中的参数,如教程中所述.如何从URL中访问参数作为HttpRequest对象的一部分?我HttpRequest.GET当前返回一个空QueryDict对象.

我想学习如何在没有库的情况下这样做,这样我就能更好地了解Django.

django rest url

414
推荐指数
15
解决办法
48万
查看次数

用于搜索的RESTful URL设计

我正在寻找一种合理的方式将搜索表示为RESTful URL.

设置:我有两个模型,汽车和车库,汽车可以在车库.所以我的网址看起来像:

/car/xxxx
  xxx == car id
  returns car with given id

/garage/yyy
  yyy = garage id
  returns garage with given id
Run Code Online (Sandbox Code Playgroud)

汽车可以独立存在(因此/汽车),也可以存在于车库中.例如,在给定车库中代表所有车辆的正确方法是什么?就像是:

/garage/yyy/cars     ?
Run Code Online (Sandbox Code Playgroud)

车库yyy和zzz中的汽车联盟怎么样?

什么是代表搜索具有某些属性的汽车的正确方法?说:给我看看所有带4扇门的蓝色轿车:

/car/search?color=blue&type=sedan&doors=4
Run Code Online (Sandbox Code Playgroud)

或者它应该是/汽车而不是?

使用"搜索"似乎不合适 - 什么是更好的方式/术语?应该只是:

/cars/?color=blue&type=sedan&doors=4
Run Code Online (Sandbox Code Playgroud)

搜索参数应该是PATHINFO还是QUERYSTRING的一部分?

简而言之,我正在寻找跨模型REST网址设计和搜索的指导.

[更新]我喜欢贾斯汀的答案,但他没有涉及多字段搜索案例:

/cars/color:blue/type:sedan/doors:4
Run Code Online (Sandbox Code Playgroud)

或类似的东西.我们怎么样

/cars/color/blue
Run Code Online (Sandbox Code Playgroud)

到多场案件?

rest

413
推荐指数
7
解决办法
18万
查看次数