最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,但是感觉复杂了点没用),还偷懒用Vagrant结合Docker来快速搭建环境,基于别人的Dockerfile把整个实验跑通了,觉得还不错。想着好像CoreOS是专门为Docker服务的,还买了一本《CoreOS实践》花小半天时间看完了,CoreOS在集群环境下确实很牛,但是我的环境还是轻量级点,所以还是基于CentOS来做,就这样研究了两天时间,与大家分享一下,欢迎留言拍砖或交流!

问题

一般开发接口的时候各种语言都已经有很成熟的框架了,互联网领域用得最多的应该是RESTfull+JSON的模式,但是小型项目对接口基于没有安全方面、性能等的考虑, 之前写过一篇直接通过JS抓取数据的《玩爽了!直接在Chrome里抓取数据》,就算考虑的话实现起来也缺少简便的办法,时间上也不一定允许。

解决方案

随着微服务的流行,需要有一个类似于API网关的中间件来做API的管理工作,也就是API的实现方面更多的考虑业务逻辑,安全、性能、监控可以交由网关来做(如下图所示,下图根据Kong官方文档修改),这样既提高业务灵活性又不缺安全性。

环境搭建

开头已经说了环境会涉及到VirtualBox、Vagrant、Docker、Nginx、Lua、OpenRety、Orange,好在基本的坑都已经填完了。但你最好也有一些这方面的基础,由于实验步骤冗长难免有些地方没有记录到或者省略。(本文所有步骤基于MacOS环境)

Vagrant CentOS环境搭建

提前安装VirtualBox、Vagrant

vagrant init centos/
vagrant up
vagrant ssh

编辑Vagrantfile,配置私有IP

config.vm.network "private_network", ip: "192.168.88.77"

安装Docker引擎

sudo yum update
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=
gpgcheck=
gpgkey=https://yum.dockerproject.org/gpg
EOF sudo yum install docker-engine
sudo systemctl enable docker.service
sudo systemctl start docker
sudo docker run --rm hello-world

初始化和配置数据库Docker

这里我做了docker volume,还有设置你的mysql root密码,执行命令进入docker

sudo docker run --name platform-db -v /alidata/database:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=your_root_password -p : mysql:5.7
sudo docker exec -it platform-db /bin/bash

创建数据库和用户

CREATE DATABASE orange;
CREATE USER 'orange'@'%' IDENTIFIED BY 'orange';
GRANT ALL PRIVILEGES ON orange.* TO 'orange'@'%';

执行数据库初始化脚本 ,初始化Orange数据库

初始化和配置Orange Docker

直接使用我发布的docker镜像 cbcye/orange5

sudo docker run -d --name orange \
--link platform-db:orange-database \
-p : \
-p : \
-p : \
--security-opt seccomp:unconfined \
cbcye/orange5

编辑配置文件

sudo docker exec -it platform-db /bin/bash

vi /usr/local/orange/orange.conf #修改数据库连接信息
vi /usr/local/orange/conf/nginx.conf #配置upstream server,真实api server

重启orange

sudo docker stop orange
sudo docker start orange

Orange Gateway控制台

访问http://192.168.88.77:9999/ 用户名:admin 密码:orange_admin

至此环境搭建成功

配置与测试

启用并编辑API重写

将真实API地址/api/appdata 通过/appdata的方式暴露给外部请求

启用与配置限速规则

一分钟只允许2次请求

使用Postman进行测试

当请求超过限制的话则会提示HTTP错误,而真实的API Server不需要做任何操作

总结

如开头所说,API Gateway作为微服务重要的中间件,对原有API Server不需要改动或者改动很小就能实现,通用的功能也很容易整合,基于Nginx的OpenResty开发的Orange性能也能得到保障。因此很有必要使用API Gateway把开放的接口管理起来。欢迎留言拍砖或交流!

附实用技巧

#查看docker日志
sudo docker logs <container_name> #查看所有docker
sudo docker ps --all #删除 docker
sudo docker rm orange #进入docker控制台(container名称:platform-db)
sudo docker exec -it platform-db /bin/bash #Orange日志位置
/usr/local/orange/logs/

最近我发现国内出现了一个可以直接使用的API网关产品(小豹API网关),相比开源产品,对企业使用起来更加方便,功能看起来比Orange的管理、监控更加强大,看网站介绍可以用于微服务网关、API服务治理平台、OpenAPI的网关。

用API网关把API管起来的更多相关文章

  1. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  2. 微服务中的 API 网关(API Gateway)

    API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...

  3. 服务中的 API 网关(API Gateway)

    我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...

  4. .net core 微服务之Api网关(Api Gateway)

    原文:.net core 微服务之Api网关(Api Gateway) 微服务网关目录 1. 微服务引子 2.使用Nginx作为api网关 3.自创api网关(重复轮子) 3.1.构建初始化 3.2. ...

  5. .net core 实现 api网关 进行 api版本控制

    场景: 由一次大的项目改动引起的app端api不兼容问题,这时候就需要对api做版本控制了,权衡之后因为用户不多,选择了强更,没人想在已经写了8000行代码的单个svc文件中维护好几个版本的接口或者继 ...

  6. API网关在API安全性中的作用

    从单一应用程序切换到微服务时,客户端的行为不能与客户端具有该应用程序的一个入口点的行为相同.简单来说就是微服务上的某一部分功能与单独实现该应用程序时存在不同. 目前在使用微服务时,客户端必须处理微服务 ...

  7. API网关

    API网关 最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,但是感觉复杂了点没用),还偷懒用Vag ...

  8. 使用API网关构建微服务

    使用传统的异步回调方法编写API组合代码会让你迅速坠入回调地狱.代码会变得混乱.难以理解且容易出错.一个更好的方法是使用响应式方法以一种声明式样式编写API网关代码.响应式抽象概念的例子有Scala中 ...

  9. 使用 Node.js 搭建一个 API 网关

    原文地址:Building an API Gateway using Node.js 外部客户端访问微服务架构中的服务时,服务端会对认证和传输有一些常见的要求.API 网关提供共享层来处理服务协议之间 ...

随机推荐

  1. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  2. Lesson 6 Percy Buttons

    Text I have just moved to a house in Bridge Street. Yesterday a bagger knocked at my door. He asked ...

  3. 剑指Offer面试题:2.二维数组中的查找

    一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  4. .NET项目版本号的小随笔

    [题外话] 一直以来都对.NET项目中的几个版本号(AssemblyVersion.AssemblyFileVersion.AssemblyInformationalVersion)以及版本号中的Re ...

  5. 在Github上搭建自己的博客(Windows平台)

    折腾了好久,终于在Github上搭建了自己的博客.这里面总结一下过程希望对大家能有所帮助. Github建博优缺点 和 csdn,新浪,网易相比,在Github上可以自己实现功能 和阿里云,VPS相比 ...

  6. OAuth2 Backend Web Application 验证过程

    本文是从我的 github 博客转载的,原文请看. 一图胜千言.图片请自由转载,请保留图片的原始签名.

  7. php后台修改人员表信息

    显示info人员表里所有内容 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  8. AngularJS 源码分析2

    上一篇地址 本文主要分析RootScopeProvider和ParseProvider RootScopeProvider简介 今天这个rootscope可是angularjs里面比较活跃的一个pro ...

  9. 移动开发--Hybrid和Native混合开发-->HybridApp 、NativeApp、WebApp

    1.1.     APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等).金融(各手机行业.P2P借贷等).医疗(智慧医疗).交通(滴滴.Uber等).教育(慕课网 ...

  10. SSIS 参数的值

    一,SSIS Parameter Value 的type 一个Parameter的Value共有三种类型,分别是Design Value,Server Value,Execution Value. D ...