这是在我的 API 中将玩家添加到团队中的方法:
PUT /teams/1/players/1/
Run Code Online (Sandbox Code Playgroud)
我现在想把球员换到另一支球队。
我怎样才能做到这一点?
我不确定我是否正确理解 RESTful API 的概念。如果我理解正确的话,这样的 API 应该提供可以通过 GET、POST、PUT 和 DELETE 请求触发的函数。我的问题是:如果一个API只提供POST请求功能,它还是RESTful吗?
在 OAUTH 中保护 REST API 的总体思路是使用 Authorization Bearer < access token> 标头,通常是 JWT,其中包含有关主题的信息,即。sub: u1 其中u1是数据库中的userId。
有了这样的访问令牌,客户端应用程序就可以访问不同的资源。假设一个用户有很多车,有很多船,等等......所以,以RESTful方式,/users返回所有用户,/users/:u1返回用户u1的数据,返回用户/users/:u1/cars/:c1汽车的数据,返回用户船的数据等。c1u1/users/:u1/boats/:b1b1u1
我的问题是关于u1. 不应该u1从 JWT 访问令牌中提取,因为我们知道我们可以信任 JWT?理论上,应用程序可以使用为 user 颁发的 JWT u1,但请求访问/users/:u2应被禁止。
我们可以使其/users/:u1不可用,并强制客户端应用程序调用并从 JWT 中/users提取。sub但是,调用/users返回数据会u1破坏 RESTful 模式及其优点(即 http 缓存)。
正确的做法是什么?
这可能是authorization关于 REST api 问题的框架。JWT只能寻址authentication而已。
security rest authorization restful-authentication restful-architecture
在大多数教程,文档,文章等有关的RESTful我遇到了几个相同点了,但我很少能看到这些"是什么使得它的RESTful"点执行.
例如,我已多次阅读:
内容类型
使用HTTP标头
Run Code Online (Sandbox Code Playgroud)Accept: application/json, text/plain
URL中的扩展名
Run Code Online (Sandbox Code Playgroud)Not RESTful, URLs are not the place for Content-Type
我从未遇到过我已经看过这个实现的API.我曾经使用的每个API总是要求我在URL的末尾附加XML或JSON.他们做错了吗?
版本
版本媒体类型
应用/ vnd.something.v1 + JSON
自定义标题
X-API-Version:1
URL中的版本
/ v1/resouce不是RESTful,通过将版本放在您创建单独资源的URL中
如果您需要引入非向后兼容的功能,那么确实创建一个单独的资源是正确的做法吗?
再一次,在我使用的所有API版本中,他们在URL中使用v1,v2(例如google,imgur等)
如果不实现这些要点,我的API不会被视为RESTful吗?
澄清这些要点将非常感激.
我正在使用JBoss-7.1和RESTEasy开发一个简单的RESTFul服务.我有一个名为CustomerService的REST服务,如下所示:
@Path(value="/customers")
@ValidateRequest
class CustomerService
{
@Path(value="/{id}")
@GET
@Produces(MediaType.APPLICATION_XML)
public Customer getCustomer(@PathParam("id") @Min(value=1) Integer id)
{
Customer customer = null;
try {
customer = dao.getCustomer(id);
} catch (Exception e) {
e.printStackTrace();
}
return customer;
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击URL http:// localhost:8080/SomeApp/customers/-1时, @ MIN约束将失败并在屏幕上显示堆栈跟踪.
有没有办法捕获这些验证错误,以便我可以准备一个带有正确错误消息的xml响应并显示给用户?
我有一个简单的RESTful方法,它当前返回一个对象的JSON表示.
我的问题更多的是从架构的角度而不是完全技术性的.
是否应该以这样的方式设计RESTful服务,使其同时返回JSON和XML?
据我所知,这是一种不好的做法,应该为此定义单独的资源.一个资源应返回JSON数据和其他一个XML.
我是否正确思考?
我有PHP背景,我用Laravel(3和4)构建了几个Web应用程序.我也有在项目中使用RESTful API的经验.
我当前的客户端有一个ERP,它是一堆PHP文件.这些文件包含大约60K行的意大利面条代码.客户不希望投入更多资金来开发该系统,因此我们决定重写整个应用程序.我知道重写的所有风险,我也阅读了Joel的文章(http://www.joelonsoftware.com/articles/fog0000000069.html),因此不需要重构或重写讨论.
对于新的应用程序,我一直在考虑使用Laravel(4或5)构建RESTful API,并使用AngularJS构建前端.那是在我测试Meteor 1.0之前.这是非常有前途的,将它用于这个项目是非常好的.但它适合这种产品吗?
我客户的产品是这样的:
应用程序包含以下部分:用户,订单,优惠,时间跟踪,销售,报告,日历,客户.
因此,将Meteor用于此类项目是否明智,或者您更喜欢RESTful API + AngularJS组合?我在犹豫,因为我担心在使用Meteor的大型项目中,代码会变得混乱.
我开始学习用于开发宁静网络服务的球衣.
正如我在大多数示例中注意到的那样使用以下注释:
@Consumes
Run Code Online (Sandbox Code Playgroud)
定义输入参数的格式
@Produces
Run Code Online (Sandbox Code Playgroud)
定义输出参数的格式
但在实际代码中,我看到的方法如下所示:
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/login")
public Response login(@FormParam("login") final String username, @FormParam("password") final String password){...}
Run Code Online (Sandbox Code Playgroud)
我看到这个方法使用POSTHTTP方法.参数userName和password将具有形式 @Consumes(MediaType.APPLICATION_FORM_URLENCODED).我看到URL来执行这个方法.
但是我不明白这个方法会返回什么.哪种格式?
作为一个新手,我试图了解REST及其原理。我已经阅读了一些有关它的文章,但是却难以理解代码需求约束,这是唯一的可选约束。它是什么 ?如何以及何时实施?任何帮助,将不胜感激。
我是Web服务的新手。因此,我从一个如下的小程序开始。
它可以在GlassFish服务器中正常运行,但不能在Tomcat中运行(我想在Tomcat上运行)。这是一个简单的程序,仅给出如何运行Web服务应用程序的想法。
FirstRestService.java:
package com.sandy.demo;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/resources")
public class FirstRestService extends Application {
}
Run Code Online (Sandbox Code Playgroud)
员工.java:
package com.sandy.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/employees")
public class Employees {
@GET
public String getEmployeesNames() {
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
我已经包含了jsr311-api-1.1.1.jar(JAX-RS API JAR文件)。
我获取了该应用程序的有效WAR文件,并将其部署在GlassFish Server中。然后,我使用URL运行服务器:http://localhost:8080/MyFirstRestApplication/resources/employees。
但是我无法在Tomcat中执行相同的操作。