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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 这篇是继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


目录
相关文章
|
3天前
|
JavaScript 前端开发 NoSQL
深入浅出Node.js后端开发
本文将引导你了解Node.js的基础知识,包括安装、运行环境搭建以及简单的代码示例。通过阅读本文,你将学会如何利用Node.js进行后端开发,并理解异步编程和事件驱动模型的核心概念。文章还将介绍一些实用的库和框架,帮助你快速开始Node.js项目。
17 4
|
2天前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
15 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
1天前
|
存储 缓存 API
构建高效后端:RESTful API 设计的最佳实践
【10月更文挑战第2天】在数字化时代,后端开发是连接用户与数据的桥梁。本文将深入探讨如何设计一个高效、易于维护的后端系统,特别是围绕RESTful API的设计原则和最佳实践。我们将从基础概念出发,逐步深入到实际案例分析,最终通过代码示例具体展示如何实现这些设计原则。无论你是初学者还是有经验的开发者,这篇文章都将为你提供价值,帮助你构建更优秀的后端服务。
23 10
|
2天前
|
安全 API 数据库
掌握GraphQL:现代API开发的新选择
【10月更文挑战第1天】在传统RESTful API显现出局限性后,GraphQL作为新型API查询语言和运行时,提供更灵活的数据获取方式。客户端可精确指定所需数据结构,减少传输量并提升效率。本文探讨GraphQL核心概念、优势及实施方法。尽管存在复杂性和性能优化等挑战,GraphQL仍是构建现代API的强大工具。
|
3天前
|
前端开发 API 开发者
深度剖析:AJAX、Fetch API如何成为Python后端开发者的最佳拍档!
深度剖析:AJAX、Fetch API如何成为Python后端开发者的最佳拍档!
17 4
|
5天前
|
存储 API 数据库
深入浅出后端开发:从零到一搭建RESTful API
在数字化的浪潮中,后端开发如同一座桥梁,连接着用户界面与数据存储。本文将引导你理解后端开发的核心概念,并通过实践案例,展示如何从零开始构建一个RESTful API。我们将探索设计原则、选择合适的编程语言和框架、数据库交互以及API测试等方面。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供一条清晰的学习路径。
|
3天前
|
前端开发 API 数据格式
颠覆传统!AJAX、Fetch API与Python后端,开启Web开发新篇章!
在Web开发领域,技术的快速迭代推动着应用不断进化。传统前后端交互方式已无法满足现代Web应用对高效、实时性和用户体验的需求。AJAX作为异步通信的先驱,使页面无需刷新即可更新部分内容,显著提升用户体验;尽管XML曾是其主要数据格式,但如今JSON已成为主流。Fetch API则以其简洁、灵活的特点成为AJAX的现代替代品,基于Promises的异步请求让开发更加高效。与此同时,Python后端凭借高效稳定和丰富的库支持,成为众多开发者的首选,无论是轻量级的Flask还是全功能的Django,都能为Web应用提供强大的支撑。
12 0
|
4天前
|
XML 前端开发 API
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
11 0
|
2月前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
134 1
|
20天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
80 6