Dubbo03

restful风格的API

Representational State Transfer,资源表现层状态转换

根路径

mashibing.com

协议

http://

版本

v1

可以直接写在URL上,或者写在header中传递“Accept-Version: v2”

  1. @RequestMapping(headers = "Accept-Version=v2",value = "models",method = RequestMethod.GET)

用HTTP协议里的动词来实现资源的增删改查

  1. GET 用来获取资源,
  2. POST 用来新建资源(也可以用于更新资源)。
  3. DELETE 用来删除资源。
  4. UPDATE http://api.chesxs.com/v1/fence 更新围栏信息

用例

单个资源

http://mashibing.com/api/v1/Users/1 使用Get方法获取id是1的用户数据

  1.          正确:GET /model/models/{id}        #获取单个资源
  2.          正确:POST /model/models            #创建单个资源
  3.          正确:PUT /model/models/{id}        #更新单个资源
  4.          正确:DELETE /model/models/{id}   #删除单个资源
  5.          正确:PATCH /model/models/{id}   #更新单个资源(只传差异)
  6.          正确:GET /model/configRuleFile    #获取单个资源(如果仅有一个值时,应采用单数方式)

返回结果:

如果指定的资源并不存在,那么应该返回404 Not Found状态,否则应该返回200 OK状态码

资源集合

对于资源集合,支持以下URL

  1. 正确: GET /model/models #获取资源列表
  2. 正确: GET /model/models?ids={ids} #批量获取资源列表
  3. 正确: DELETE /model/models?ids={ids} #批量删除资源列表
  4. 返回结果:

如果列表为空,则应该空数组

响应结果

响应状态码 含义
成功 200 调用成功
201 创建成功
204 执行成功,但无返回值
失败 400 无效请求
401 没有登录
403 没有权限
404 请求的资源不存在
500 服务内部错误

swagger(丝袜哥)

Swagger是一个简单但功能强大的API表达工具。它具有地球上最大的API工具生态系统,数以千计的开发人员,使用几乎所有的现代编程语言,都在支持和使用Swagger。使用Swagger生成API,我们可以得到交互式文档,自动生成代码的SDK以及API的发现特性等。

OpenAPI

OpenAPI规范是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。OpenAPI规范帮助我们描述一个API的基本信息

比如:

  • 有关该API的一般性描述
  • 可用路径(/资源)
  • 在每个路径上的可用操作(获取/提交...)
  • 每个操作的输入/输出格式

根据OpenAPI规范编写的二进制文本文件,能够像代码一样用任何VCS工具管理起来一旦编写完成,API文档可以作为:

  • 需求和系统特性描述的根据
  • 前后台查询、讨论、自测的基础
  • 部分或者全部代码自动生成的根据
  • 其他重要的作用,比如开放平台开发者的手册...

资源

官网

https://swagger.io/

在线编辑器

http://editor.swagger.io/

编写API文档

我们可以选择使用JSON或者YAML的语言格式来编写API文档

  1. swagger: '2.0'
  2. info:
  3. version: 1.0.0
  4. title: mashibing.com api
  5. description: 马老师的官网接口
  6. contact:
  7. name: yiming
  8. url: http://mashibing.com
  9. email: 888@qqq.com
  10. license:
  11. name: MIT
  12. url: http://opensource.org/licenses/MIT
  13. schemes:
  14. - http
  15. host: mashibing.com
  16. basePath: /api/v1
  17. paths:
  18. /user/{userid}:
  19. get:
  20. summary: 获取一个用户
  21. description: 根据id获取用户信息
  22. parameters:
  23. - name: userid
  24. in: path
  25. required: true
  26. description: 用户id
  27. type: string
  28. responses:
  29. 200:
  30. description: OK
  31. /user:
  32. get:
  33. summary: 返回List 包含所有用户
  34. description: 返回List 包含所有用户
  35. parameters:
  36. - name: pageSize
  37. in: query
  38. description: 每页显示多少
  39. type: integer
  40. - name: pageNum
  41. in: query
  42. description: 当前第几页
  43. type: integer
  44. responses:
  45. 200:
  46. description: OK
  47. schema:
  48. type: array
  49. items:
  50. required:
  51. - username
  52. properties:
  53. username:
  54. type: string
  55. password:
  56. type: string

整合SpringBoot

官方依赖

  1. <dependency>
  2. <groupId>io.springfox</groupId>
  3. <artifactId>springfox-swagger2</artifactId>
  4. <version>2.2.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.springfox</groupId>
  8. <artifactId>springfox-swagger-ui</artifactId>
  9. <version>2.2.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.codehaus.jackson</groupId>
  13. <artifactId>jackson-core-asl</artifactId>
  14. <version>1.9.13</version>
  15. </dependency>

第三方

https://github.com/SpringForAll/spring-boot-starter-swagger

依赖引入

  1. <dependency>
  2. <groupId>com.spring4all</groupId>
  3. <artifactId>swagger-spring-boot-starter</artifactId>
  4. <version>1.9.0.RELEASE</version>
  5. </dependency>

启用注解

http://localhost:803//v2/api-docs

http://localhost:8080/swagger-ui.html

分组

  1. swagger.docket.controller.title=group-controller
  2. swagger.docket.controller.base-package=com.mashibing.springboot.controller
  3. swagger.docket.restcontroller.title=group-restcontroller
  4. swagger.docket.restcontroller.base-package=com.mashibing.springboot.controller.rest

实体模型

  1. @ApiModelProperty(value = "权限id", name = "id",dataType = "integer",required = true,example = "1")
  2. private Integer id;

接口方法

  1. @ApiOperation(value = "获取所有权限")
  2. @RequestMapping(value = "list",method = RequestMethod.GET)
  3. public List<Permission> list() {
  4. return permissionSrv.findAll();
  5. }
  6. @ApiOperation(value = "添加权限")
  7. @RequestMapping("update")
  8. public RespStat update(@ApiParam(name="permission",required = true, example = "{json}",value = "权限对象") @RequestBody Permission permission) {
  9. System.out.println("permission:" + ToStringBuilder.reflectionToString(permission));
  10. permissionSrv.update(permission);
  11. return RespStat.build(200);
  12. }

接口类描述

  1. @Api(value = "用户权限管理",tags={"用户操作接口"})

Dubbo 03 Restful风格的API的更多相关文章

  1. PHP实现RESTful风格的API实例(三)

    接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...

  2. PHP实现RESTful风格的API实例(二)

    接前一篇PHP实现RESTful风格的API实例(一) Response.php :包含一个Request类,即输出类.根据接收到的Content-Type,将Request类返回的数组拼接成对应的格 ...

  3. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  4. PHP实现Restful风格的API

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  5. restful风格的API

    在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...

  6. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  7. Gin实战:Gin+Mysql简单的Restful风格的API(二)

    上一篇介绍了Gin+Mysql简单的Restful风格的API,但代码放在一个文件中,还不属于restful风格,接下来将进行进一步的封装. 目录结构 ☁ gin_restful2 tree . ├─ ...

  8. Gin实战:Gin+Mysql简单的Restful风格的API

    我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...

  9. springMvc中restful风格的api路径中把小数点当参数,SpringMvc中url有小数点

    在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping(&q ...

随机推荐

  1. 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境

    使用这个jar包来跨服务器上传 搞两个tomcat.一个springmvc一个fileupload 选中tomcat server点击左边的加号 需要改端口和JMX pport这个端口 部署文件上传的 ...

  2. CnPack 开源软件项目

    Cnpack公共窗体库 ------------------------------ CnPack 2009-09-14 SVN 包,包括以下内容: 1. CnPack 组件包所有源代码.2. CnP ...

  3. Spring集成CXF获取HttpServletRequest,HttpServletResponse

    最近的项目中,在Spring继承CXF中要用到request来获取IP,所以先要获取到HttpServletRequest对象,具体方法如下: 1.配置文件: <jaxrs:server id= ...

  4. selenium+java:获取列表中的值

    selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天 ...

  5. Windows-T

    查看Windows系统版本号 同时按下Windows键和字母R键,然后输入winver就可以了 命令行运行计算器cmd-calc win10卸载XShell6报错1603 在运行里输入regedit打 ...

  6. 扩展Caylay定理

    参考资料: https://hyscere.github.io/2019/09/05/%E6%89%A9%E5%B1%95Caylay%E5%AE%9A%E7%90%86/ https://www.c ...

  7. query函数的可查询数据

    #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func from sqlalche ...

  8. inner join on会过滤掉两边空值的条件

    前两天工作过程中,遇到一个问题,关于join on查询的,对于查出来的结果一直都很疑惑,这里记录一下. 1.首先看下面这条sql查询语句: 查询出来的结果是25053 2.加个 o.lat = n.l ...

  9. superset连接sqlite频繁断开

    出现上述现象的原因是SQLite只支持库级锁,不支持并发执行写操作,即使是不同的表,同一时刻也只能进行一个写操作.例如,事务T1在表A新插入一条数据,事务T2在表B中更新一条已存在的数据,这两个操作是 ...

  10. 自己总结的keepalived的配置流程以及注意事项

    编写背景:上班时领导要求我们团队实现postgresql主备切换的高可用问题,我辅助keepalived的部分,从查资料到实施最后使用,最后编写了这个博客,水平有限,欢迎大家指正 ###postgre ...