1.0.3 • Published 5 years ago

@jackinhuang/moa v1.0.3

Weekly downloads
-
License
-
Repository
-
Last release
5 years ago

1. Moa

Moa(MongoDB OpenAPI)基于 LoopBack 实现快速将MongoDB Atlas中的数据以RESTful API接口方式发布。 使用MongoDB Atlas + Moa,开发者无需设置应用服务器基础架构即可快速构建应用程序后台。 Moa 通过简单配置即可将MongoDB Atlas中的数据以OpenAPI的方式发布并浏览使用或者提供给开发者使用。

传统开发 & 使用 Moa 开发

传统方式构建后台使用Maoa
列出后台接口需求及规范列出后台接口需求及规范
组织程序员开发后端程序安装API Server 开源模块,本地部署统一认证
测试功能在Moa平台配置 API,统一配置管理
调试bug发布API,快速交付
准备硬件服务器
部署应用程序
部署数据库
配置高可用,权限等设置
测试并上线

2 架构

Moa 由API云端设计器、API Server、MongoDB Atlas三部分组成:

  • API云端设计器:统一配置管理API发布,权限认证
  • API Server :用户本地环境运行的开源组件,用于执行API发布,提供 RESTful API 接口
  • MongoDB Atlas :存储配置数据、作为 API Server 的数据源

架构

3. 如何使用 Moa

3.1 准备 Atlas cluster

3.2 注册 Moa 账号

注册地址: http://openapi.mongodb.expert

3.3 下载 API Server (分支 moa)

# 检出分支 moa 的代码
git clone --single-branch --branch=moa https://github.com/tapd8/apig.git

# 安装依赖
cd apig
npm install

3.4 创建 API Server ID 和 JWT认证密钥

  • 登录 Moa 打开 【API 服务器】
  • 创建 API Server,下载配置文件

    	- 应用名称: 自定义应用名称
    	- 客户端 URL:API Server 运行起来后的访问URL,例如:http://127.0.0.1:3080
    	- JWT 密钥:客户端请求发布API接口时使用的的密钥
    	- 创建完成后,下载配置文件: config.js

API Server

API Server

3.5 配置启动 API Server

  • 将下载的 config.js 复制到 API Server 工程的根目录,替换默认 config.js
# 启动 API Server
npm start

3.6 配置发布 API

3.6.1 创建 MongoDB Atlas 数据源

  • 打开【连接】

Connection List

3.6.2 创建/设计API

  • 打开【数据发布】
  • 点击【新建】按钮,创建标准增删查改 API 和 创建 自定义查询 API

Create API Create Custom API

3.6.3 发布 API

  • 打开【数据发布】
  • 点击【发布】按钮

Publish Data

3.7 浏览查询数据

  • 打开【数据浏览】
  • 选择已经发布的 API 查看数据

Explorer Data Explorer Data

3.8 调用 OpenAPI 接口,完成业务开发

客户端应用调用 Moa 发布的 API 需使用 OAuth 2.0 授权访问 API Server, 流程如下: OAuth

3.8.1 调用 Moa OAuth 认证接口获取 JWT Token ( Client Credentials grant type)

grant_type: client_credentials					// 固定值
client_id: b5fd01c5996a634320ebf53cbab5fadf			// API Server ID
client_secret: 795a357ff5c2cc895b5a2b8e0a0e883a			// API Server JWT Secret 
scope: api-server						/ 固定值
username: lirufei0808@gmail.com					// 用户登录邮箱
  • 响应如下:
    {
    "access_token": "eyJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6ImI1ZmQwMWM1OTk2YTYzNDMyMGViZjUzY2JhYjVmYWRmIiwidXNlcl9pZCI6IjVjZTBiYzUxMzNmZDI5NGI2YTI1YTYzYyIsImNyZWF0ZWRBdCI6MTU1ODM2ODg4NDk0NCwicm9sZXMiOlsiNWNlMGJjNTEzM2ZkMjk0YjZhMjVhNjNjIl0sImV4cGlyZWRhdGUiOjE1NTgzNzA2ODQ5NDR9.fKSCRs2pCNdYYVCYjM-W1OfmQO057EKKOTO1n89Q998",
    "expires_in": 1209600,
    "scope": "api-server",
    "refresh_token": "eyJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6ImI1ZmQwMWM1OTk2YTYzNDMyMGViZjUzY2JhYjVmYWRmIiwidXNlcl9pZCI6IjVjZTBiYzUxMzNmZDI5NGI2YTI1YTYzYyIsImNyZWF0ZWRBdCI6MTU1ODM2ODg4NDk0NSwicm9sZXMiOlsiNWNlMGJjNTEzM2ZkMjk0YjZhMjVhNjNjIl0sImV4cGlyZWRhdGUiOjE1NTgzNzA2ODQ5NDV9.3p0we5y-XaUKJXVH8_yk6tjd9z-gV7uKK1xiflhjRrk",
    "token_type": "Bearer"
    }
 
### 3.8.2 调用 Moa OAuth 认证接口获取 JWT Token (Password grant type)
 - 浏览器请求
 
 http://openapi.mongodb.expert/oauth/authorize?client_id=6f68ca8e9f53f4e6f994bceb7c4a7f4d&response_type=token&grant_type=password&scope=api-server&redirect_uri=http://47.75.94.238:3080

参数说明

client_id: 6f68ca8e9f53f4e6f994bceb7c4a7f4d // API Server ID response_type: token // 固定值 grant_type: password // 固定值 scope: api-server // 固定值 redirect_uri: http://47.75.94.238:3080 // 授权后的跳转地址

 - 用户输入用户密码授权后跳转地址如下:
 
 http://47.75.94.238:3080/#access_token=eyJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6IjZmNjhjYThlOWY1M2Y0ZTZmOTk0YmNlYjdjNGE3ZjRkIiwidXNlcl9pZCI6IjVjZTNhNjRjODQ5MjMwMDMwOWMyMWEyMSIsImNyZWF0ZWRBdCI6MTU1OTE4NDk1MjY5Miwicm9sZXMiOlsiNWNlM2E2NGM4NDkyMzAwMzA5YzIxYTIxIl0sImV4cGlyZWRhdGUiOjE1NTkxODY3NTI2OTJ9.O6l-LQTH4ohGgxuLMQhND_H7-YZVG244tnQybtZY2Wo&expires_in=1209600&scope=api-server&token_type=Bearer

响应参数

access_token: eyJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6IjZmNjhjYThlOWY1M2Y0ZTZmOTk0YmNlYjdjNGE3ZjRkIiwidXNlcl9pZCI6IjVjZTNhNjRjODQ5MjMwMDMwOWMyMWEyMSIsImNyZWF0ZWRBdCI6MTU1OTE4NDk1MjY5Miwicm9sZXMiOlsiNWNlM2E2NGM4NDkyMzAwMzA5YzIxYTIxIl0sImV4cGlyZWRhdGUiOjE1NTkxODY3NTI2OTJ9.O6l-LQTH4ohGgxuLMQhND_H7-YZVG244tnQybtZY2Wo expires_in: 1209600 scope: api-server token_type: Bearer

 
### 3.8.3 调用 API 接口获取数据 
 - 查询分页
 	```
	
	 // 请求
	 GET http://127.0.0.1:3083/api/v1/User?filter[order]=name+DESC&filter[limit]=10&filter[skip]=0
	 // 请求头
	 token: eyJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6ImI1ZmQwMWM1OTk2YTYzNDMyMGViZjUzY2JhYjVmYWRmIiwidXNlcl9pZCI6IjVjZTBiYzUxMzNmZDI5NGI2YTI1YTYzYyIsImNyZWF0ZWRBdCI6MTU1ODM2ODg4NDk0NCwicm9sZXMiOlsiNWNlMGJjNTEzM2ZkMjk0YjZhMjVhNjNjIl0sImV4cGlyZWRhdGUiOjE1NTgzNzA2ODQ5NDR9.fKSCRs2pCNdYYVCYjM-W1OfmQO057EKKOTO1n89Q998
	
	 // 响应
	 {
	 	"data":[{
	 		"_id":"5c7df3f47178c48ec19e5bc5",
	 		"name":"王大为",
	 		"age":10,"desc":["Good","Boy","Happly"],"email":"lrf@gmail.com",
	 		"metadata":{"home_page":"http://www.baidu.com"},"username":"lrf"
	 	},{
	 		...
	 	}],
	 	"total":{
	 		"count":21
	 	}
	 }
	```

 - 创建记录
 - 修改记录
 - 删除记录
 
## 3.9 查看 OpenAPI 接口文档

 - 打开 【数据浏览】
 - 选择 【API Server】,指定要查看 API Server
 - 点击 【API 文档】 打开 API 文档页面

![View API Document](img/view_api.png)
![API Explorer](img/api_explorer.png)