搭建个人OpenAPI

Open API 即开放 API,也称开放平台。 所谓的开放 API(OpenAPI)是服务型网站常见的一种应用,网站的服务商将自己的网站服务封装成一系列
API(Application Programming Interface,应用编程接口)开放出去,供第三方开发者使用,这种行为就叫做开放网站的 API,所开放的 API 就被称作 OpenAPI(开放 API )。

RESTful API

Representational State Transfer,翻译是”表现层状态转化”。可以总结为一句话:REST 是所有 Web 应用都应该遵守的架构设计指导原则。
面向资源是 REST 最明显的特征,对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST 要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。

什么是 RESTful API?
符合 REST 设计标准的 API,即 RESTful API。REST 架构设计,遵循的各项标准和准则,就是 HTTP 协议的表现,换句话说,HTTP 协议就是属于 REST 架构的设计模式。比如,无状态,请求-响应。。。

简单实践

那如何构建咱们自己的Open API,这里做了简单的代码示例,包括基础的权限验证、限流控制,方便笔者自己构建其他应用服务时的调用。

部署环境(阿里云ECS服务器)

操作系统:Centos7.1

容器管理:Docker version 1.13.1

微服务注册中心镜像:webapp/eureka-server

微服务配置中心镜像:webapp/config-server

微服务API应用镜像:webapp/open-api

微服务API网关镜像:webapp/api-gateway

源码:https://github.com/lizzie2008/spring-cloud-app.git

API工程 创建工程

创建Gateway工程(open-api),引入依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> 暴露API

open-api工程很简单,实现业务逻辑,对外暴露接口即可,这里我们简单示例,新建一个测试Controller,返回一行文本。

@RestController @RequestMapping("/v1") public class TestController { @GetMapping("/info") public String info(){ return "Hello World!"; } }

启动服务,可以通过 :8081/v1/info 正常访问。

Gateway工程 创建工程

创建Gateway工程(api-gateway),导入相关依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> 访问权限控制

数据库建权限表

CREATE TABLE `access_info` ( `access_key` varchar(32) NOT NULL COMMENT '访问码', `access_desc` varchar(32) NOT NULL COMMENT '访问说明', `visit_module` varchar(32) NOT NULL COMMENT '访问模块', `access_status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '访问状态, 0:不允许访问 1:允许访问', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`access_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

从数据库获取权限

@Data @Entity public class AccessInfo { /** * 访问码. */ @Id private String accessKey; /** * 访问说明. */ private String accessDesc; /** * 访问模块. */ private String visitModule; /** * 访问状态, 0:不允许访问 1:允许访问 */ private AccessStatus accessStatus; /** * 创建时间. */ private Date createTime; /** * 更新时间. */ private Date updateTime; } @Repository public interface AccessInfoRepository extends JpaRepository<AccessInfo, String> { } @Service public class AccessInfoService { private final AccessInfoRepository accessInfoRepository; public AccessInfoService(AccessInfoRepository accessInfoRepository) { this.accessInfoRepository = accessInfoRepository; } /** * 获取所有访问权限信息 * * @return */ public List<AccessInfo> findAll() { return accessInfoRepository.findAll(); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyfsg.html