NodeJS 后端开发 03 使用Restify开发API 一个完整的CRUD

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 这篇是继NodeJs Restful API开发 https://blog.csdn.net/geeklevin/article/details/109013368 的进一步补充。目录概述从简入手先看效果图再回来讲原理快速过一下,curl工具的介绍本篇重点

概述

CRUD 就是我们常说的创建Create,读取Read,更新Update,删除Delete。


这几个操作是后端开发中最常见的几个,举个例子,比如说一个商品销售的网站。它涉及的商品添加上架,提供商品给用户浏览,以及后续商品属性更新,下架到最终撤走,都是围绕一个商品进行CRUD的操作。当然实际操作会更加复杂。



从简入手

前篇写了一个更加参数name打印到响应返回用户端,在浏览器展示。


这篇我们将创建一个商品product,然后我们围绕商品做下面4个接口:


添加商品信息

读取商品信息

更新商品信息

删除商品


先看效果图

读取所有商品,打开浏览器访问:http://localhost:8080/products

(下图为FireFox 右键->查看元素,这里选择火狐因为结果自动格式化了。 如果是Chromeimage.png

在上面网络这一栏,我们可以进去看到,浏览器访问这个接口链接本质上,是进行了一个GET 请求。

这里有必要引入一个常用的命令行工具“curl”, 先记住简单使用命令:

curl -X GET 目标链接

#上面的命令是使用curl工具对 目标链接  发起 GET 请求。

image.png

上图左边为接口测试窗口,右边为接口服务的web进程。



由于浏览器默认没有安装测试web api的工具,下面其他增加,删除,更新操作都使用curl工具进行


添加商品信息

curl -X POST -H "Content-type: application/json" -d '{"id":5,"name":"Cannon","type":"Camera"}' http://localhost:8080/produc

image.png

  • 删除商品信息,效果如下

执行删除前,我们先查询一下id为4的产品信息,再执行删除,效果如下

image.png

右边web进程输出了最新产品信息没有id=4的记录了,删除成功。



查询商品信息,效果如下

#查询id=4的产品,没有返回,已删除


curl -X GET http://localhost:8080/product/4


#查询id=5的产品,返回id为5的产品信息。


curl -X GET http://localhost:8080/product/5  image.png

修改商品信息

#我们打算把id=5的产品名改为CannonX2


curl -X PUT -H "Content-type: application/json" -d '{"id":5,"name":"CannonX2","type":"Camera"}' http://localhost:8080/product  


image.png

再回来讲原理


快速过一下,curl工具的介绍

curl 是Linux类操作系统常见的Http请求客户端,linux可以通过终端输入:yum install -y curl 进行快速安装。


简单重复一下curl 的使用:curl -X 动作(http 方法) 链接(目标接口网址)


更多信息看:https://curl.se/download.html



本篇重点

下面代码重点解析,上图多个接口的代码实现。


关于server(http 服务创建) 没有再次注释,可以回顾前篇: https://blog.csdn.net/geeklevin/article/details/109013368

const restify = require('restify');
//加载了产品信息的js模块赋值给pm常量
const pm = require('./product.js');
//这里回顾上面演示第一个图,访问链接前打印所有产品信息
pm.show();
console.log(pm.query(1));
function read(req, res, next) {
   ....//省略获取请求中id的代码段
   // 调用pm对象的查询产品方法
   res.send(pm.query(id))
}
function dele(req, res, next) {
   ....//省略获取请求中id的代码段
   //调用pm对象的删除产品方法
  res.send({status:'deleted',msg: pm.delete(id)})
}
function readAll(req, res, next){
   //调用pm对象的读取所有产品方法
   res.send(pm.getData())
}
function create(req, res, next){
   ....//省略获取请求中product的代码段
   //调用pm对象的增加产品方法
   pm.add(product);
}
function update(req, res, next){
   ....//省略获取请求中product的代码段
   //调用pm对象的修改产品方法
   pm.update(product) 
}
//这里是前篇讲过
var server = restify.createServer();
server.use(restify.plugins.bodyParser({ mapParams: true }));
//这里重点,把readAll方法绑定到接口/products的GET动作
server.get('/products',readAll);
//这里依次把 查/增/改/删 分别绑定到/product的GET / POST / PUT / DELETE 动作。
server.get('/product/:id', read);
server.post('/product', create);
server.put('/product', update);
server.del('/product/:id', dele);
//服务器监听8080端口
server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

上面通过restify 对应的server对象绑定了4个常用的HTTP请求方法,实现了对同个链接不同请求方法的不同响应。


在此,我们再拿一个更新产品操作解析:


curl -X PUT -H "Content-type: application/json" -d '{"id":5,"name":"CannonX2","type":"Camera"}' http://localhost:8080/product


用户端:使用curl 针对/product接口,发起PUT请求


服务端:发现/product接口有效,并且绑定了更新产品方法到PUT方法,执行更新产品方法。


(最近想到了一个RESTFly工具在弄,拖了很久写的这篇文章。欢迎读者评论解析其他增加,删除,查询的原理)



PS:上图为重点代码解析,省略了很多代码(不作为可执行最终版)


项目完整代码:


https://codechina.csdn.net/geeklevin/nodejs-api-002-crud


目录
相关文章
|
6天前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
102 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
25天前
|
人工智能 Rust 安全
DeepClaude:结合 DeepSeek R1 和 Claude AI 各自优势开发的 AI 应用平台,支持 API 调用和零延迟的即时响应
DeepClaude 是一个开源的 AI 应用开发平台,结合了 DeepSeek R1 和 Claude 模型的优势,提供即时响应、端到端加密和高度可配置的功能。
287 4
DeepClaude:结合 DeepSeek R1 和 Claude AI 各自优势开发的 AI 应用平台,支持 API 调用和零延迟的即时响应
|
26天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
61 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
6天前
|
数据可视化 测试技术 API
前后端分离开发:如何高效调试API?有工具 vs 无工具全解析
在前后端分离的开发模式中,API 调试的效率直接影响项目的质量和交付速度。通过本文的对比分析,我们可以看到无工具调试模式虽具备灵活性和代码复用能力,但在操作便利性和团队协作上稍显不足。而传统的外部调试工具带来了可视化、高效协作与扩展性,却可能存在工具切换带来的开发链路断层问题。Apipost-Hepler 融合了两者的优势,让开发者无需离开熟悉的 IDEA 环境,就能享受可视化调试工具的强大功能。
35 5
|
11天前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
1月前
|
API PHP 开发者
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。
|
6天前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
25天前
|
监控 供应链 搜索推荐
亚马逊商品详情接口(亚马逊 API 系列)
亚马逊作为全球最大的电商平台之一,提供了丰富的商品资源。开发者和电商从业者可通过亚马逊商品详情接口获取商品的描述、价格、评论、排名等数据,对市场分析、竞品研究、价格监控及业务优化具有重要价值。接口基于MWS服务,支持HTTP/HTTPS协议,需注册并获得API权限。Python示例展示了如何使用mws库调用接口获取商品详情。应用场景包括价格监控、市场调研、智能选品、用户推荐和库存管理等,助力电商运营和决策。
93 23
|
26天前
|
JSON 数据挖掘 API
lazada商品详情接口 (lazada API系列)
Lazada 是东南亚知名电商平台,提供海量商品资源。通过其商品详情接口,开发者和商家可获取商品标题、价格、库存、描述、图片、用户评价等详细信息,助力市场竞争分析、商品优化及库存管理。接口采用 HTTP GET 请求,返回 JSON 格式的响应数据,支持 Python 等语言调用。应用场景包括竞品分析、价格趋势研究、用户评价分析及电商应用开发,为企业决策和用户体验提升提供有力支持。
86 21
|
23天前
|
JSON API 数据格式
eBay商品详情接口(ebay API系列)
eBay 商品详情接口是电商从业者、开发者和数据分析师获取商品详细信息的重要工具,涵盖标题、价格、库存、卖家信息等。使用前需在 eBay 开发者平台注册并获取 API 凭证,通过 HTTP GET 请求调用接口,返回 JSON 格式数据。Python 示例代码展示了如何发送请求并解析响应,确保合法合规使用数据。
57 12

热门文章

最新文章