使用Express构建RESTful API
RESTful服务
REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的服务。通过动词(HTTP方法)+名词(请求资源的接口路径)的方式请求资源,赋予接口特定的含义。
REST风格定义了一系列创建HTTP服务的惯例:
- POST:创建资源
- PUT:更新资源
- GET:读取资源
- DELETE:删除资源
例如:
- 获取所有书籍: GET /api/books
- 获取id为1的书籍: GET /api/books/1
- 更新id为1的书籍:PUT /api/books/1
- 删除id为1的书籍:DELETE /api/books/1
- 添加书籍:POST /api/books
Express构建RESTful API
Express.js是一个轻量且灵活的Node.js WEB应用框架,可以快速搭建WEB应用。其底层是对Node.js的HTTP模块进行封装,增加路由、中间件等特性,使得用户能搭建应用级别的WEB服务。
处理GET请求
直接上代码:
const express = require('express');
const app = express();
const Joi = require('joi');
app.use(express.json());
const books = [
{ id: 1, name: 'book1'},
{ id: 2, name: 'book2'},
{ id: 3, name: 'book3'},
];
app.get('/', (req, res) => {
res.end('Hello World!');
});
//获取所有书籍
app.get('/api/books', (req, res) => {
res.json(books).end();
});
//获取特定id的书籍
app.get('/api/books/:id', (req, res) => {
let book = books.find(b => b.id === parseInt(req.params.id));
if(!book) return res.status(404).json({msg: 'The book with the given ID not find.'});
res.json(book).end();
});
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Listening on port ${port}`));
GET /api/books

GET /api/books/2

GET /api/books/5

处理POST请求
function validateBook(book){
const schema = {
name: Joi.string().min(3).required()
};
return Joi.validate(book, schema);
}
//使用POST方法添加书籍
app.post('/api/books', (req, res) => {
const {error} = validateBook(req.body);
if(error){
return res.status(400).json({msg: error.details[0].message}).end();
}
const book = {
id: books.length + 1,
name: req.body.name
};
books.push(book);
res.json(book).end();
});
POST /api/books


处理PUT请求
//使用PUT方法修改书籍
app.put('/api/books/:id', (req, res) => {
let book = books.find(b => b.id === parseInt(req.params.id));
if(!book) return res.status(404).json({msg: 'The book with the given ID not find.'});
const { error } = validateBook(req.body);
if(error) return res.status(400).json({msg: error.details[0].message}).end();
book.name = req.body.name;
res.json(book).end();
});
PUT /api/books/1

处理DELETE
//使用DELETE方法删除书籍
app.delete('/api/books/:id', (req, res) => {
let book = books.find(b => b.id === parseInt(req.params.id));
if(!book) return res.status(404).json({msg: 'The book with the given ID not find.'});
const index = books.indexOf(book);
books.splice(index, 1);
res.json(book).end();
});
DELETE /api/books/1

使用Express构建RESTful API的更多相关文章
- 使用ASP.NET Core构建RESTful API的技术指南
译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...
- Spring MVC中使用 Swagger2 构建Restful API
1.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <contex ...
- SpringBoot 构建RestFul API 含单元测试
相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的 @Controller . @RestC ...
- Springboot 如何加密,以及利用Swagger2构建Restful API
先看一下使用Swagger2构建Restful API效果图 超级简单的,只需要在pom 中引用如下jar包 <dependency> <groupId>io.springfo ...
- springboot集成swagger2构建RESTful API文档
在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...
- 集成swagger2构建Restful API
集成swagger2构建Restful API 在pom.xml中进行版本管理 <swagger.version>2.8.0</swagger.version> 给taosir ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作
以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 先决条件 我在B站有一个非常入门的ASP.NET Core 3.0的视频教程,如果您对ASP.NET Co ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Archit ...
- 使用 Spring Boot 构建 RESTful API
1. 使用 Idea 创建 Spring Initializer 项目 在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖: <dependency ...
随机推荐
- NCBI News
NCBI淘汰序列GI - 使用Accession.Version代替! 截至2016年9月,被称为“GI”的整数序列标识符将不再包括在NCBI支持的序列记录的GenBank,GenPept和FASTA ...
- Github上下载某一个文件夹
1.安装svn sudo apt-get install subversion 2.修改下载文件夹的链接 例如,https://github.com/a***b/learn/tree/master/m ...
- sql随机抽取数据
mysql: select * from tablename order by rand() limit 10 sqlserver: select top 10 * from tablen ...
- c# richTextBox1添加内容并将滚动条滚动到当前焦点处
1. StringBuilder sb = new StringBuilder(); StringBuilder的改变比string快多了 2. sb.Append("\r\n" ...
- 腾讯云 centos 一键安装nginx环境
这里测试centos版本为7.4 进入命令行直接敲入一下代码 $ yum install nginx 根据提示 进行确认 下一步 即可安装完毕: 服务器默认根目录为 : /usr/share/ngin ...
- php,微信公众号,获取用户地理位置 定位 经纬度
<?php //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一个php文件 require_once ...
- MySQL 安装与使用(三)
操作系统:CentOS release 5.10 (Final) MySQL版本:5.1.72-community 占位学习与编辑中……
- ArcGIS的地理坐标系与大地坐标系
一直以来,总有很多朋友针对地理坐标系.大地坐标系这两个概念吃不透.近日,在网上看到一篇文章介绍它们,非常喜欢.所以在此转发一下,希望能够对制图的朋友们有所帮助. 地理坐标:为球面坐标. 参考平面地是 ...
- c#+web下载文件夹
最近公司在做工程项目,实现文件夹下载. 网上找了很久,发现网上的代码都有相似的问题,不过最终还是让我找到了一个符合的项目. 工程: 进行项目文件夹下载功能分析,弄清楚文件夹下载的原理,提供的数据支持. ...
- stm32的gpio函数介绍
一.gpio_init函数 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 调用时的格式一般是例如 RCC ...