java web restful api是什么意思_RESTful Web服务

RESTful Web服务

REST风格的Web服务被定义为JSR 339 ,以及完整的规范可以下载。

REST是服务的一种利用Web标准的架构风格,其主要原则是:

一切都可以被认定为一个资源,每个资源都可以被唯一

URI标识 。

资源可以以多种格式来表示,由一个媒体类型定义。该

媒体类型将提供有关以何种格式满足产生的信息。标准方法是定义了客户端和服务器协商上资源的内容类型。

使用标准的HTTP方法与资源进行交互:

GET来检索资源,

POST来创建资源,

PUT来更新资源,

DELETE键删除资源。

客户端和服务端点之间的通信是无状态的。所有相关的

由服务器所需的状态是由客户端在每次调用时提交。

REST风格的Web服务( JAX-RS )的Java API定义了一个标准的注解驱动的API,

这可以帮助开发人员在Java中构建RESTful Web服务并调用它。

资源Resouce

以@Path:标注:

@Path("orders")

public class OrderResource {

@GET

public List getAll() {

//. . .

}

@GET

@Path("{oid}")

public Order getOrder(@PathParam("oid")int id) {

//. . .

}

}

@XmlRootElement

public class Order {

int id;

//. . .

}

OrderResource是一个POJO类,并发布为REST风格的资源,用@ Path注释。

Order类标有@ XmlRootElement注释,允许Java和XML转换

该getAll方法,它提供了所有订单的列表,我们访问使用HTTP GET方法这个资源调用这个方法。

使用@ GET注释。

GetOrder方法上的@ Path注释标记为一个子资源,可以使用orders/{OID}访问。

OID的大括号将它作为模板参数并绑定其值

在运行到传入GetOrder方法的id参数。

@ PathParam也可以用于模板参数绑定到一个资源类字段。

通常情况下,一个RESTful资源连同其他类和

资源被绑定在一个.war文件。 Application类和@ ApplicationPath注解用于指定在打包封存所有的RESTful资源的

基本路径。应用类还提供有关应用程序的额外的元数据。

假设上面这个类打包在store.war 文件,部署在localhost:8080,Application类如下:

@ApplicationPath("webresources")

public class ApplicationConfig extends Application {

}

获得所有订单列表getall访问:

http://localhost:8080/store/webresources/orders

获得某个订单:

http://localhost:8080/store/webresources/orders/1

值1将被传递给是GetOrder的方法参数ID。资源方法将找到正确的订单号码,并返回结果,这个结果是Order类,以@ XmlRootElement注释,使用JAXB将

Java转换到XML,返回XML表示形式

一个URI可以通过使用名称/值对HTTP查询参数。你可以映射这些

资源方法的参数或使用@ QueryParam注释字段。

public List getAll(@QueryParam("start")int from,

@QueryParam("page")int page) {

//. . .

}

可以被如下URL访问:

http://localhost:8080/store/webresources/orders?start=10&page=20

一个资源的方法在JAX-RS实现之前必须等待然后产生一个响应返回给客户端。 JAXRS

2允许异步实现,

其做法是先暂停该客户端的连接,后来响应可用恢复到这个连接。

@Path("orders")

public class OrderResource {

@GET

public void getAll(@Suspended final AsyncResponse ar) {

executor.submit(new Runnable() {

@Override

public void run() {

List response = new ArrayList<>();

//. . .

ar.resume(response);

}

});

}

}

该getAll方法方法被标记为产生一个异步响应。方法参数使用新注入的类AsyncResponse的

注释@Suspended。这个方法的返回类型为void。

此方法派生一个新线程,如使用

ManagedExecutorService作为Java EE的定义的并发实用程序。客户端连接

在这个时候被暂停。

新的线程执行长时间运行的操作,完成后恢复连接,当准备就绪,

通过调用resume恢复连接

可以通过注册CompletionCallback:一个实现获得完成的事件。

public class OrderResource {

public void getAll(@Suspended final AsyncResponse ar) {

ar.register(new MyCompletionCallback());

}

class MyCompletionCallback implements CompletionCallback {

@Override

public void onComplete(Throwable t) {

//. . .

}

}

}

当异步请求完成时,回调触发onComplete。

也可以通过注册ConnectionCallback:获得连接相关事件。

public class OrderResource {

public void getAll(@Suspended final AsyncResponse ar) {

ar.register(new MyCompletionCallback());

}

class MyCompletionCallback implements CompletionCallback {

@Override

public void onDisconnect(AsyncResponse ar) {

//. . .

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值