Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API网关express-gateway初体验 #20

Open
FrankKai opened this issue Apr 19, 2018 · 0 comments
Open

API网关express-gateway初体验 #20

FrankKai opened this issue Apr 19, 2018 · 0 comments

Comments

@FrankKai
Copy link
Owner

昨天朋友发来一个消息,问我express源码中的一个问题,我去看了一番源码以后,发现自己并不是很懂,只能看懂一些字面意思...

不过在聊天过程中,了解到他们公司在用express做api网关,什么是api网关呢?

我将以express-gateway为例,学习get started教程,对api网关进行探索。

安装
①npm i -g express-gateway
②创建一个express网关:eg gateway create
③根据提示选择server模板
④运行express网关:npm start

5分钟入门教程
目标:
1.选择一个微服务并且作为一个api暴露出去
2.定义一个api的消费者
3.使用key认证保证api的安全性

1.选择一个微服务并且作为一个api暴露出去
①直接访问微服务
curl http://httpbin.org/ip

{
   "origin": "73.92.47.31" # this will be your own IP address
 }

②指定微服务

在express gateway的一个默认的管道中,服务将被分配到一个端口。一个管道指的是一个策略集合。Express Gateway有一个代理策略。在默认的管道中,会使用这个代理策略,网关现在挡在了https://httpbin.org/ip服务前面,并且并且路由其它请求到网关的端口。

在config/gateway.config.yml这个文件中,可以找到一个serviceEndpoints选项,这里定义了httpbin这个服务。

serviceEndpoints:
   httpbin:
     url: 'https://httpbin.org'

在默认管道的proxy选项的action中,可以找到serviceEndpoint: httpbin

③以api的方式公开微服务

 通过Express Gateway,我们将暴露httpbin 服务到api端口。当通过api端口公开api后,外部可以访问到api。

在config/gateway.config.yml这个文件中,可以找到apiEndpoints选项,这里定义了api。

apiEndpoints:
    api:
      host: 'localhost'
      paths: '/ip'

现在我们有一个公共api浮出水面了,我们应该确保自己可以穿过express网关获取到service的权限。

2.定义一个api网关的消费者
管理我们api的人,在这里我们称之为“Consumer”。

eg users create

3.使用key认证方式确保安全
①现在api暴露了出去,而且也获得了访问权限。我们现在将为其加上key安全认证。
在config/gateway.config.yml这个文件中,可以找到pipelines选项,这里定义了key-auth。

 pipelines:
    - name: getting-started
      apiEndpoints:
        - api
      policies:
        - key-auth:
        - proxy:
            - action:
                serviceEndpoint: httpbin
                changeOrigin: true

②为Consumer Bob分配key。

eg credentials create -c bob -t key-auth -q

③Bob没有加key直接访问。

curl http://localhost:8080/ip
    //Unauthorized

④Bob加了key进行访问。

$ curl -H "Authorization: apiKey 0Er0Ldv5EHSUE364Dj9Gv:2Yzq1Pngs1JYaB2my9Ge4u" http://localhost:8080/ip
  {
    "origin": "73.92.47.31"
  }

That's it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant