graphql学习(二)Restful API的初步认识
来源:互联网 发布:旅游saas平台源码 编辑:程序博客网 时间:2024/05/22 13:39
今天对GraphQL进一步的学习,本来打算看一下graphql-java源码,但是由于源码中包括了groovy和kotlin语言,这两种语言虽然听说和java像,但是毕竟还是新语言,不能很敢尝试。
graphql和restful在之前搜索资料的时候,这两种语言总是拿过来比较。为了更好地认识graphql,再加上目前对于graphq在java Web项目中究竟是怎么用的,还是一头雾水,希望通过对restful 的学习可以有进一步的认识。
这次的学习主要是基于Spring搭建RESTful web Service这个视频和网上其他的一些资料,毕竟相对于graphl,restful还是比较成熟的,网上的材料较多,但也都良莠不齐的。
这篇博客也主要是关于SpringMVC和Restful的,对于SpringMVC基础将不做介绍。
一、RESTful简介
restful在graphql出现之前是一直和webService进行比较的。两者的区别的区别这里不做讨论。
准确来说,restful不是一种类似SSH的框架,只是一种风格而已。主要是将后台和服务器进行分离。
REST通常基于使用HTTP,URI,和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准。
Spring官方文档中有对于RestFul很具体的介绍和使用,可以参考https://spring.io/understanding/rest和https://spring.io/guides/gs/rest-service/这两个链接。
Principles of REST- Resources expose easily understood directory structure URIs.- Representations transfer JSON or XML to represent data objects and attributes.- Messages use HTTP methods explicitly (for example, GET, POST, PUT, and DELETE).- Stateless interactions store no client context on the server between requests. State dependencies limit and restrict scalability. The client holds session state.
在HTTP中主要是有POST,DELETE,PUT和GET四种方式(PATCH不常用)来分别指定为增删改查四种方式。
同时响应码使用的也是基于HTTP 的 状态码
1XX - informational 消息2XX - success 成功3XX - redirection 重定向4XX - client error 客户端错误5XX - server error 服务器错误
二、GraphQL和RESTful的区别
对于graphql和restful的区别,毕竟自己都是刚接触,还有很多需要学习的东西,而且就算初步使用,也是无法体会两者之间的差别;故区别这种东西还是听听前辈的。
个人感觉http://blog.csdn.net/changruihe/article/details/54630976讲的是比较好,起码看上去比较有自己的个人体会。
三、代码
在本次中,使用类似的方式之后,SpringMVC的IOC自动注入不能用了,很奇怪,就是我在测试的时候无法访问数据库了。
1、相关的包
SpringMVC的基础包之上,还需要引入Jackson相关的包。
- jackson-annotation
- jackson-core
- Jackson-databind
在Spring的配置文件中需要加入一下的这一段配置信息,其他的与之前的配置信息相同,主要是将返回的数据自动封装成JSON格式的数据。但是今天测试了一下,发现不用配置下面的信息,只要是RestController就可以直接返回JSON格式的数据。(昨天测试的时候明明会报没有配置这个信息的错误,很奇怪,可能当时用的是Controller吧)
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=gbk</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list> </property> </bean>
2、实体层Entity
@Entity@Table(name="user")public class User { private int id; private String username; private String password; public User(int id, String username, String password) { this.id = id; this.username = username; this.password = password; } public User() { } //getter和setter...}
3、由于无法访问数据库,在这里直接自定义一些测试数据
同时,这里的Controller层主要使用的是RestController这个标签。关于RestController可以http://docs.spring.io/spring/docs/current/javadoc-api//org/springframework/web/bind/annotation/RestController.html参考这篇文档,主要就是说@RestController注解相当于@ResponseBody + @Controller合在一起的作用。此时视图解析器就不在起作用,返回的为JSON格式的数据或者XML的数据,上部分的在配置文件中配置的信息即是将返回的参数封装成JSON格式的。
@RestControllerpublic class RestController_2 { @RequestMapping(value = "/rest_2/user/{id}", method = RequestMethod.GET) public List<User> get(@PathVariable int id) { System.out.println(id); UserSerivce userSerivce = new UserServiceImpl(); List<User> user = null; try {// user = userSerivce.getUser(id); for (int i = 0; i < 5; i++) { User u = new User(i,i+"",i+""); user.add(u); } } catch (Exception e) { e.printStackTrace(); } return user; }}
此时启动服务器之后即可在网页中访问到返回的数据。
[ { "id": 0, "username": "0", "password": "0" }, { "id": 0, "username": "1", "password": "1" }, { "id": 0, "username": "2", "password": "2" }, { "id": 0, "username": "3", "password": "3" }, { "id": 0, "username": "4", "password": "4" }]
4、客户端,主要是使用RestTemplate 进行访问。
public class Unknown { public static void main(String[] args) { Unknown.test(); } public static void test(){ RestTemplate restTemplate = new RestTemplate(); User[] users = restTemplate.getForObject("http://localhost:8080/MicroResource/rest_2/user/1", User[].class); for (User user : users) { System.out.println(user); } }}
整体实现上基本上就是这样,但是就目前情况来讲,还是不太懂restful使用的好处在哪里,就是无法自己体会到。
如果文章中有任何侵犯到您的,望告知642646522@qq.com,一定在第一时间删改。
- graphql学习(二)Restful API的初步认识
- graphql学习(一)graphql-java文档初步阅读
- graphql学习(三)一些和GraphQL相关的
- graphql学习(四)GraphQL和SpringMVC 的整合
- REST|RESTful初步认识
- 初步认识restful接口
- 从零开始学习Java Web(二):初步认识Servlet
- GitHub API实战(包含Graphql API)
- 【API设计风格—RESTful】:服务端如何编写RESTful风格的API(二)
- 学习java的初步认识
- GraphQL学习笔记(GraphQL + Spring boot demo) part 1
- GraphQL学习笔记(GraphQL + Spring boot demo) part 2
- android中Handler的初步认识(二)
- Android中ListView的初步认识(二)
- Android中控件的初步认识(二)
- android多线程之AsyncTask的初步认识(二)
- GraphQL : 比restful 更加灵活的 数据查询框架
- 定时器初步认识(二)
- React总结5:React中的一些坑
- JavaSwing_2.11: JProgressBar(进度条)
- js迭代器
- JavaSwing_2.12: JSlider(滑块)
- iOS扩大按钮的可点击范围
- graphql学习(二)Restful API的初步认识
- 对Python 函数修饰符的一些理解
- 自定义异常链处理
- Java
- <NOIP> 29 . P2089 烤鸡
- JavaScript创建对象的七种方式
- leetcode 532. K-diff Pairs in an Array
- 线程池
- 小程序开发之坑一 -- ios不显示tabBar的文字