开发 RESTful 接口
本章介绍 RESTful 接口的安装导入和使用方法。
概述
EdgerOS 后端程序是基于 RESTful 风格的 Web 应用程序框架构建的,支持 GET、POST、DELETE、HEAD、PUT 等各种请求方法,以下介绍 RESTful 的安装导入和请求方法。
安装导入
前端技术种类众多,开发者需安装相对应的 HTTP 插件。本章以 Vue 的 Axios 插件为例,通过 script 标签引入静态 js 文件。
从 vue.min.js 获取 vue.min.js,从 axios.min.js 获取 axios.min.js。
参考以下示例,导入 vue.js 和 vue.js axios。
<!--引入vue.js-->
<script src="./vue/vue.min.js"></script>
<!--引入vue.js axios插件-->
<script src="./vue/axios.min.js"></script>
请求方法
本章以 GET 和 POST 为例,介绍 RESTful 的请求方法。
GET 请求
- 请参考以下示例,查询用户信息列表。
getUsers: function () {
const auth = {
'edger-token': this.token,
'edger-srand': this.srand
};
axios
.get('/api/user', {}, {headers: auth})
.then(res =>{
console.log(res.body);
})
.catch(function (error) {
console.log(error);
});
}
- 请参考以下示例,在后端处理 GET 请求。
router.get('/api/user', function (req, res) {
const userInfo = req.eos.user // 提取用户信息
console.log('/api/user', userInfo.acoid)
res.json({
result: true,
message: 'success',
data: users
})
})
POST 请求
- 请参考以下示例,在前端通过 post 请求,提交用户填写的个人信息。
addUser: function () {
const auth = {
'edger-token': this.token,
'edger-srand': this.srand
};
axios
.post('/api/user', { name: this.name, phone: this.phone }, {headers: auth})
.then(res => {
console.log(res.body);
})
.catch(function (error) {
console.log(error);
});
}
- 请参考以下示例,在后端处理 POST 请求。
router.post("/api/user", function(req, res) {
// 数据库或其他操作
res.json({
result: true,
message: "success",
});
});
安全性说明
如果需要对某个 API 进行安全保护,可以在声明该 API 时增加前缀“/api”,以增加 API 的安全性。
缓存能力说明
爱智 App 会为爱智应用程序提供缓存能力,静态文件资源请求可以直接从缓存中获取,为了保证你的 REST API 的 GET 请求不会被缓存,你可以遵守以下任意的规则:
- 以“/api”开头。
- REST 的请求头包含
edger-token
和edger-srand
。 - REST 的请求头包含
content-type
。
示例
// Server
const fs = require('fs')
const WebApp = require('webapp');
const app = WebApp.createApp();
app.use(WebApp.static('./public'));
// 通过'/api/image'获取的资源不会被缓存
app.use('/api/image', (req,res)=>{
const imgStream=fs.createReadStream('api_image.png')
imgStream.pipe(res)
});
app.start();
require('iosched').forever();
// Client
// 以下资源请求均不会被缓存
fetch('/images/demo.jpg', {
headers: { 'edger-token': 'xxx', 'edger-srand': 'xxx' }
});
fetch('/images/demo.jpg', {
headers: { 'content-type': 'image/jpg' }
});
fetch('/api/image');
userInfo 数据结构
字段名称 | 类型 | 说明 |
---|---|---|
nickname | string | 用户昵称(默认为手机号码) |
exp | number | 用户过期时间 |
acoid | string | 翼辉 ID |