背景
由于项目上要与ITOO进行 互通数据,图书馆项目必须要与ITOO项目进行远程调用接口,由于图书馆项目使用的是Ejb框架,所以经过和项目经理的考核我们准备使用Restful进行通信实现远程通信
宏观介绍
首先通过宏观我们先认识一下什么是restful,说简单点它是一种风格,什么样的风格呢?实现了REST的风格。由于要实现远程通信肯定少不了就是与协议有关的东东,REST是基于http协议,根据图大概应该有所了解,在我们Ejb框架中Jboss可以帮助我们利用注解解决远程调用的问题。
他被称为:表示性状态转义,他是通过请求和响应实现的一中客户端-服务器应用架构样式,核心是资源,表示,转移,在rest框架中所有的数据与功能都被称为资源。我们所有的资源都是通过URI,我们的URI使用的注解是@path
jaxrs-client
我简单的跟大家讲一条线,并且restful所有的资源都打包到了war包中,首先从客户端开始
//客户端的代码地址
private static final String REST_TARGET_URL = "http://localhost:8080/jboss-jaxrs-client/rest/contacts";
//名字
private static final String CONTACT_NAME = "New Judy";
//手机号
private static final String CONTACT_PHONE = "+18631687403";
//下面是运行的第一个例子
@Test
public void cruedTest() {
Response response =
//通过我们的REST_TARGET_URL找到我们的地址,然后调到地址类中的@delete注解
ClientBuilder.newClient().target(REST_TARGET_URL).request().delete()
//格式:assertEquals(message发生错误的时候报这个额消息,expected期望值,actual,被测试代码返回的实际值)
Assert.assertEquals("我是第一个judy哦,我要删除哦。All contacts should be dropped"+"实际返回的值:"+response.getStatus(), Response.ok().build().getStatus(), response.getStatus());
}
服务器端例子
需要注意到几个注解
//表示资源路径为contacts
/**我们必须有这个路径否则找不到资源,因为我们在客户端的url中的地址是:
http://localhost:8080/jboss-jaxrs-client/rest/contacts,
所以最后她会去找contacts
**/
@Path("/contacts")
//post请求
@POST
//用于指定MIME媒体类型,资源可以使用客户端发送这种类型请求
@Consumes(MediaType.APPLICATION_JSON)
//指定MIME媒体类型,资源可以生成这种类型表示,并返回给可会断
//MediaType用来指定媒体类型
//指定输出格式为json格式的
@Produces(MediaType.APPLICATION_JSON)
根据@delete我们直接调到这里
// delete all contacts
@DELETE
public Response removeAllContacts() {
//清楚map结合中所有的数据
contactsRepository.clear();
//重置设置为空白状态,构建器*被重置为空白状态,相当于调用ok方法。
return Response.ok().build();
}
///处了这种形式有的时候你会发现在你根据path去寻找restful的时候,可能需要参数
//服务器端写法,这个时候id就相当于是一个参数。
@DELETE
@Path("/{id}")
public Response removeContact(final @PathParam("id") Long id) {
contactsRepository.remove(id);
return Response.ok().build();
}
///用于指定压塑包中所有restful资源的基本路径,
//继承Application的原因是我们需要使用应用程序额外先关的元数据
@ApplicationPath("/rest")
public class JaxRsActivator extends Application {
/* class body intentionally left blank */
}
总结
这个例子仅仅是个入门!期待与ITOO完美的进行的通信~