[JavaEE] Create API documents with Swagger
We mainly need to modify our Model and REST endpoint code to enable swagger Document.
model/Book.java: By doing this, we can get each model defination in swagger
rest/BookRespostory.java: By doing this, we can get each endpoint of API
BoodEndpoint.java:
package com.pluralsight.bookstore.rest; import com.pluralsight.bookstore.model.Book;
import com.pluralsight.bookstore.repository.BookRepository;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import javax.inject.Inject;
import javax.validation.constraints.Min;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.List; import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN; @Path("/books")
@Api("Book")
public class BookEndpoint { // ======================================
// = Injection Points =
// ====================================== @Inject
private BookRepository bookRepository; // ======================================
// = Business methods =
// ====================================== @POST
@Consumes(APPLICATION_JSON)
@ApiOperation(value = "Create a book given a Json Book reforestation")
@ApiResponses({
@ApiResponse(code = 201, message = "The book was created"),
@ApiResponse(code = 415, message = "Format error")
})
public Response createBook(Book book, @Context UriInfo uriInfo) {
book = bookRepository.create(book);
URI createdURI = uriInfo.getBaseUriBuilder().path(book.getId().toString()).build();
return Response.created(createdURI).build();
} @GET
@Path("/{id : \\d+}")
@Produces(APPLICATION_JSON)
@ApiOperation(value = "Returns a book given an id", response = Book.class)
@ApiResponses({
@ApiResponse(code = 200, message = "Book found"),
@ApiResponse(code = 404, message = "Book not found")
})
public Response getBook(@PathParam("id") @Min(1) Long id) {
Book book = bookRepository.find(id); if (book == null)
return Response.status(Response.Status.NOT_FOUND).build(); return Response.ok(book).build();
} @DELETE
@Path("/{id : \\d+}")
@ApiOperation(value = "Delete a book given an id")
@ApiResponses({
@ApiResponse(code = 204, message = "Book has been deleted"),
@ApiResponse(code = 400, message = "Invalid param id"),
@ApiResponse(code = 500, message = "Book not exists")
})
public Response deleteBook(@PathParam("id") @Min(1) Long id) {
bookRepository.delete(id);
return Response.noContent().build();
} }
model/Book.java:
package com.pluralsight.bookstore.model; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import javax.persistence.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import java.util.Date; /**
* @author Antonio Goncalves
* http://www.antoniogoncalves.org
* --
*/ @Entity
@ApiModel(description = "Book resource representation")
public class Book { // ======================================
// = Attributes =
// ====================================== @Id
@GeneratedValue
@ApiModelProperty("Identifier")
private Long id; @Column(length = 200)
@NotNull
@Size(min = 1, max = 200)
@ApiModelProperty("Title of the book")
private String title; @Column(length = 10000)
@Size(min = 1, max = 10000)
@ApiModelProperty("Description of the book")
private String description; // ======================================
// = Constructors =
// ====================================== public Book() {
} public Book(String isbn, String title, Float unitCost, Integer nbOfPages, com.pluralsight.bookstore.model.Language language, Date publicationDate, String imageURL, String description) {
this.isbn = isbn;
this.title = title;
this.unitCost = unitCost;
this.nbOfPages = nbOfPages;
this.language = language;
this.publicationDate = publicationDate;
this.imageURL = imageURL;
this.description = description;
} }
In the end, the Swagger.json looks like this:
{
"swagger" : "2.0",
"info" : {
"description" : "BookStore APIs exposed from a Java EE back-end to an Angular front-end",
"version" : "1.0.0",
"title" : "BookStore APIs",
"contact" : {
"name" : "Antonio Goncalves",
"url" : "https://app.pluralsight.com/library/search?q=Antonio+Goncalves",
"email" : "antonio.goncalves@gmail.com"
}
},
"host" : "localhost:8080",
"basePath" : "/bookstore-back/api",
"tags" : [ {
"name" : "Book"
} ],
"schemes" : [ "http", "https" ],
"paths" : {
"/books" : {
"get" : {
"tags" : [ "Book" ],
"summary" : "Returns all the books",
"description" : "",
"operationId" : "getBooks",
"produces" : [ "application/json" ],
"responses" : {
"200" : {
"description" : "Books found",
"schema" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/Book"
}
}
},
"204" : {
"description" : "No books found"
}
}
},
"post" : {
"tags" : [ "Book" ],
"summary" : "Creates a book given a JSon Book representation",
"description" : "",
"operationId" : "createBook",
"consumes" : [ "application/json" ],
"parameters" : [ {
"in" : "body",
"name" : "body",
"description" : "Book to be created",
"required" : true,
"schema" : {
"$ref" : "#/definitions/Book"
}
} ],
"responses" : {
"201" : {
"description" : "The book is created"
},
"415" : {
"description" : "Format is not JSon"
}
}
}
},
"/books/count" : {
"get" : {
"tags" : [ "Book" ],
"summary" : "Returns the number of books",
"description" : "",
"operationId" : "countBooks",
"produces" : [ "text/plain" ],
"responses" : {
"200" : {
"description" : "Number of books found",
"schema" : {
"type" : "integer",
"format" : "int64"
}
},
"204" : {
"description" : "No books found"
}
}
}
},
"/books/{id}" : {
"get" : {
"tags" : [ "Book" ],
"summary" : "Returns a book given an id",
"description" : "",
"operationId" : "getBook",
"produces" : [ "application/json" ],
"parameters" : [ {
"name" : "id",
"in" : "path",
"required" : true,
"type" : "integer",
"minimum" : 1.0,
"pattern" : "\\d+",
"format" : "int64"
} ],
"responses" : {
"200" : {
"description" : "Book found",
"schema" : {
"$ref" : "#/definitions/Book"
}
},
"400" : {
"description" : "Invalid input. Id cannot be lower than 1"
},
"404" : {
"description" : "Book not found"
}
}
},
"delete" : {
"tags" : [ "Book" ],
"summary" : "Deletes a book given an id",
"description" : "",
"operationId" : "deleteBook",
"parameters" : [ {
"name" : "id",
"in" : "path",
"required" : true,
"type" : "integer",
"minimum" : 1.0,
"pattern" : "\\d+",
"format" : "int64"
} ],
"responses" : {
"204" : {
"description" : "Book has been deleted"
},
"400" : {
"description" : "Invalid input. Id cannot be lower than 1"
},
"500" : {
"description" : "Book not found"
}
}
}
}
},
"definitions" : {
"Book" : {
"type" : "object",
"required" : [ "isbn", "title" ],
"properties" : {
"id" : {
"type" : "integer",
"format" : "int64",
"description" : "Identifier"
},
"title" : {
"type" : "string",
"description" : "Title of the book",
"minLength" : 1,
"maxLength" : 200
},
"description" : {
"type" : "string",
"description" : "Summary describing the book",
"minLength" : 1,
"maxLength" : 10000
},
"unitCost" : {
"type" : "number",
"format" : "float",
"description" : "Unit cost",
"minimum" : 1.0
},
"isbn" : {
"type" : "string",
"description" : "ISBN number",
"minLength" : 1,
"maxLength" : 50
},
"publicationDate" : {
"type" : "string",
"format" : "date-time",
"description" : "Date in which the book has been published"
},
"nbOfPages" : {
"type" : "integer",
"format" : "int32",
"description" : "Number of pages"
},
"imageURL" : {
"type" : "string",
"description" : "URL of the image cover"
},
"language" : {
"type" : "string",
"description" : "Language in which the book has been written",
"enum" : [ "ENGLISH", "FRENCH", "SPANISH", "PORTUGUESE", "ITALIAN", "FINISH", "GERMAN", "DEUTSCH", "RUSSIAN" ]
}
},
"description" : "Book resource representation"
}
}
}
[JavaEE] Create API documents with Swagger的更多相关文章
- 在ASP.NET Core Web API上使用Swagger提供API文档
我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...
- Core Web API上使用Swagger提供API文档
在ASP.NET Core Web API上使用Swagger提供API文档 我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...
- ASP.NET Core Web API中使用Swagger
本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger 在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...
- JAVAEE 7 api.chm
JAVAEE 7 api.chm 链接:https://pan.baidu.com/s/1LUD3oam5B-Hp8tdpfQYk2w 提取码:x1kc
- 2种方式解决nginx负载下的Web API站点里swagger无法使用
Web API接口站点,引入了swagger来实时生成在线的api文档,也便于api接口的在线测试.swagger:The World's Most Popular Framework for API ...
- gRPC helloworld service, RESTful JSON API gateway and swagger UI
概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后 ...
- WebApi生成在线API文档--Swagger
1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...
- ASP.NET Web API 中使用 swagger 来管理 API 文档
本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档.文章分二个部分,第一部分主要讲如何用 EF6 ...
- Asp.Net Web Api中使用Swagger
关于swagger 设计是API开发的基础.Swagger使API设计变得轻而易举,为开发人员.架构师和产品所有者提供了易于使用的工具. 官方网址:https://swagger.io/solutio ...
随机推荐
- Spring.Net学习笔记(3)-创建对象
一.开发环境 编译器:VS2013 .Net版本:.net framework4.5 二.涉及程序集 Spring.Core.dll:1.3 Common.Logging 三.开发过程 1.项目结构 ...
- HTML增加附件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- http请求和响应头部
说一说常见的请求头和响应头都有什么呢? 1)请求(客户端->服务端[request]) GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1 ...
- (9)string对象上的操作2
比较string对象的比较运算符 这种由string类定义的几种比较字符串的运算符能逐一比较string对象中的字符(对大小写敏感).
- rabbitmq 简单示例(Hello World)
一:消息中间件: AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计 RabbitMQ是实现AMQP( ...
- 搭建jQuery开发环境
每个版本又分为一下两种:开发版和生产版: 版本 大小/KB 描述jquery-1.x.js 约288 开发版,完整无压缩,多用于学习,开发和测试jquery-2.x.js 约251 开发版,完整无压缩 ...
- Flask框架 之第一个Flask程序
from flask import Flask # 创建flask应用对象 # __name__ 代表当前模块名称 # flask以当前目录为总目录,static目录为静态目录,templates为模 ...
- 判断点击第几个按钮JS代码的三种方法
方法一:使用下标实现<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- java_IO_1
public class DirStudy { public static void main(String[] args) { File file = new File("F:/Eclip ...
- php第二十三节课
XML XML:页面之间传递数据,跨平台传递 HTML:超文本标记语言,核心标签 XML特点:1.标签名可以自己定义2.有且只有一个根3.大小写敏感4.标签必须完整 <!DOCTYPE html ...