Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >最近写了一个小玩意儿 - 零编码搞定整站 api 接口

最近写了一个小玩意儿 - 零编码搞定整站 api 接口

作者头像
zz_jesse
发布于 2020-11-06 06:29:37
发布于 2020-11-06 06:29:37
43600
代码可运行
举报
文章被收录于专栏:前端技术江湖前端技术江湖
运行总次数:0
代码可运行

解释下标题:玩意,本可以指某种有趣味的物件,但在汉语言的发展和民俗口语的发展过程中有了贬义的指代。所以这里是有趣的意思。

本文介绍一种方法,可以让你做一些小型项目时可以做到零代码生成接口。

先说问题

如果我们自己要开发一个完整的项目,也就是前后台都需要自己写,这里当然少不了需要写很多接口,这样的项目就像是你接了一个私活,钱少事儿多,因为前后台都要自己搞,工作量不小。

这种项目的架构就是个简单的三层架构,视图层、逻辑层、数据层。

数据层就是直接查库,通过sql语句查询数据,供逻辑层来使用,逻辑层对外提供一些数据访问接口,同时处理视图层的数据请求。

正常开发的话,你需要什么接口就硬编码来写,写方法名,对参数进行处理,然后写sql语句查询数据,还要维护一堆文件。

就好比下面这样:

其中一个文件的代码:

数据层的品牌管理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *  品牌类型管理
 */

import dbConnection from './db-connection';
const TB_NAME = 'tbClass';

export default {
    getAllBrands(classType) {
        const sql = `SELECT id,className,cusId,classType,addTime,pic,des from ${TB_NAME} WHERE classType=${classType} order BY ID Desc;`;
        return dbConnection.query(sql);
    },
    getBrandDetails(id) {
        const sql = `SELECT id,className,cusId,classType,pic,des from ${TB_NAME} WHERE id=${id};`;
        return dbConnection.query(sql);
    },
    getCurBrand(className){
        const sql = `SELECT id,className,cusId,classType,pic,des from ${TB_NAME} WHERE className='${className}';`;
        return dbConnection.query(sql); 
    },
    addBrand(opt){
        const sql = `INSERT INTO ${TB_NAME}(className,cusId,classType,pic,des)
                VALUES('${opt.className}','${opt.cusId}','${opt.classType}','${opt.pic}','${opt.des}')
                `;
        return dbConnection.query(sql);        
    },
    updateBrand(opt) {
        opt.id = parseInt(opt.id, 10);
        const sql = `UPDATE ${TB_NAME} SET className='${opt.className}',pic='${opt.pic}',des='${opt.des}' WHERE ID=${opt.id};`;
        return dbConnection.query(sql);
    },
    deleteBrand(opt) {
        opt.id = parseInt(opt.id, 10);
        const sql = `DELETE FROM ${TB_NAME} WHERE ID=${opt.id};`;
        return dbConnection.query(sql);
    }
}

对应的逻辑层 品牌管理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//api/brands
import dbBrands from '../db-common/brands';

export default {
    //获得品牌列表
    getBrandList: async () => {
        const data = await dbBrands.getAllBrands(1000);
        return data;
    },
    //获得类型列表
    getTypeList: async () => {
        const data = await dbBrands.getAllBrands(2000);
        return data;
    },
    getAllBrands: async (opt)=>{ 
        const data = await dbBrands.getAllBrands(opt.classType);
        return data;
    },
    getBrandDetails: async (opt) => {
        if(!opt.id){
            return false;
        }
        return dbBrands.getBrandDetails(opt.id)
    },
    moidfyBrand: async (opt) => {
        if (!opt.id || !opt.className) {
            return false;
        }
        const res = await dbBrands.updateBrand(opt);
        if (res.affectedRows > 0) {
            return true;
        }
        return false;
    },
    addBrand: async (opt) => {
        if (!opt.classType || !opt.className) {
            return false;
        }
        const curBrand = await dbBrands.getCurBrand(opt.className);
        if(curBrand.length > 0){
            return {
                'error_code': 100,
                'error_msg': '名称已存在'
            };
        }else{
            const res = await dbBrands.addBrand(opt);
            if (res.affectedRows > 0) {
                return true;
            }
        }
        return false;
    },
    deleteBrand: async (opt) => {
        if (!opt.id) {
            return false;
        }
        const res = await dbBrands.deleteBrand(opt);
        if (res.affectedRows > 0) {
            return true;
        }
        return false;
    }
}

发现问题

看了上面代码有没有发现什么问题?

逻辑很少,倒是重复的代码很多,新增一个接口需要搞很多自己都感觉没意义的代码,时间成本高,唯一的好处就是可读性高,结构清晰。

所以我不想再写这样的代码了,不对,是粘贴复制,真的没意义,还费键盘。

解决问题

如何解决?

其实很简单,通过一个配置文件轻松搞定。

把接口相关的信息,以及所需要的参数和数据源通通写入配置文件。

然后写一个中间件来处理该配置文件即可。

说的再多不如上代码,看配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
  "/feapi/products/getAllList": {//接口地址
    "method": "get|post",//请求类型 
    "des": "查询xxxx列表",//接口名称
    "paramType":"pager",
    "reqOptParams":{//参数配置,接口需要的参数写在这里,
      sycx:{
        isRequire:false, //是否必填
        type:'string'//参数类型
      },
      addWhere:{
        isRequire:false,
         type:'string'//参数类型
      }
    },
    "response": { //数据源配置,可以是从数据查询,也可以从文件,也可以是一个json对象
      "source": "db",
      "sql": "select a.id,a.sycx,a.newModel,a.oldModel,a.innerJ,a.outerJ,a.heHeight,a.addWhere,a.yearCount from tbCarModel a ",
      "json": "{\"isok\":\"fdfdfdf\"}",
      "file_json": "file_json/aaa.json"
    }
  }
}

上面就是全部的配置内容,具体字段的意思也有注释,后面需要接口就增加一个配置就完事儿。分分钟,省时省力。

当然上面是一个基础配置,能满足的场景可能有限(更多场景也能满足,想办法放到配置里就行),对于增删改查,分页查询,动态条件查询都没啥问题,我已经实现了,也用在了具体项目中。源码就不贴了,没啥难度,有需要可以私信我。

看到这里,有什么想说的吗?

我觉得价值巨大,因为能省时间,时间就是生命。

虽然路子很野,但很有效。现在增加一个接口,就是分分钟。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于NodeJS的KOA2框架实现restful API网站后台
在此前写的文章“从零基础入门进行小程序开发实战”中,已经介绍过背单词的小程序,因为没有备案的服务器资源只能使用系统后台提供的缓存功能存储用户数据。缓存有大小限制,而且只提供key-value的存储方式,使用起来也很不方便。
程序你好
2021/08/20
2.6K0
基于React和GraphQL的黛梦设计与实现
这是笔者在中秋无聊写着玩的,假期闲暇之余憋出来的帖子。麻雀虽小,但五脏俱全,涉及到的方方面面还是蛮全的。所以就设计了一个黛梦(demo)------ 打通了GraphQL的接口与前端交互的流程,并且将数据存入MYSQL,分享下React和GraphQL的使用,大致内容如下:
江涛学编程
2021/10/13
1.8K0
实现简单前后端完全分离增删改查:node.js+mysql+vue
(由于不是大项目,全部使用CDN链接资源) 在根目录新建一个文件 index.html 代码如下
不愿意做鱼的小鲸鱼
2022/09/24
2.1K0
实现简单前后端完全分离增删改查:node.js+mysql+vue
maven+vue+servlet+element+MyBatis 前后端分离小项目
准备工作 需要的文件我已经打包好了: 链接:https://pan.baidu.com/s/1gTIi2nTHHv3bfcy5khKxgw 提取码:i2al 前端页面:可参考此篇文章 Element 入门教程 自行编写,也可以直接使用我准备好的模板 sql 文件 ```sql -- 创建数据库 create database db1 character set utf8; use db1; -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_
ruochen
2022/03/03
3.2K0
maven+vue+servlet+element+MyBatis 前后端分离小项目
Node.js学习笔记(四)——NodeJS访问MongoDB与MySQL数据库
MongoDB是开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序丰富;高伸缩性; MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
张果
2022/09/29
3.7K0
Node.js学习笔记(四)——NodeJS访问MongoDB与MySQL数据库
搭建node服务(二):操作MySQL
要想进行数据库操作就需要和数据库建立连接,然后通过连接进行数据库的操作。MySQL的数据库连接方式有以下几种:
宜信技术学院
2020/06/03
1.8K0
搭建node服务(二):操作MySQL
Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装。 Dapper的用法比较接近ADO.NET所以性能也是比较快。所以我们先来看看使用ADO.NET的时候我们怎么实现代码复用的封装。 ◆ 一、ADO.NET的封装案例 利用反射对ADO.NET进行封装,看代码: DBHelper.cs:这边用的是mysql,如果要用sqlserver将MySqlConnection换成SqlConnection即可。 这个写的比较简单,如果有复杂的sql可能就支
IT大咖说
2022/03/14
3K0
Week32-脚手架组件发布功能开发
2-1 大厂前端物料体系介绍 2-2 组件平台架构设计 点击查看【processon】
六个周
2022/10/28
2610
mall整合SpringBoot+MyBatis搭建基本骨架
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-01
macrozheng
2019/07/22
7090
mall整合SpringBoot+MyBatis搭建基本骨架
KZ-API接口服务
挺早之前就想写个 api 接口服务,封装下自己收集的一些 api 接口,以便调用,正好最近在接触 SSR 框架,所以就使用 Nuxt3 来编写该项目。
愧怍
2022/12/27
2.5K0
KZ-API接口服务
​eggjs实战
swagger会扫描配置的API文档格式自动生成一份json数据,而swagger官方也提供了ui来做通常的展示,当然也支持自定义ui的。不过对后端开发者来说,能用就可以了,官方就可以了。
一粒小麦
2019/07/26
3.1K0
​eggjs实战
猿实战03——猿首战之手把手教你撸品牌
猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是问题。想要一起实战吗?,关注公主号猿人工厂,获取基础代码,手把手带你开发一个完整的电商系统。
山旮旯的胖子
2020/08/24
6670
猿实战03——猿首战之手把手教你撸品牌
5w字长文带你【从0使用NextJS+SSR开发博客系统】 | 技术创作特训营第五期
Next.js 是一个用于构建 React 应用程序的 React 框架。它的目标是使 React 应用的开发变得更简单、更灵活。下面是一些 Next.js 的关键特性:
程序员库里
2024/02/05
1.7K1
JSX AS DSL? 写个 Mock API 服务器看看
这几天打算写一个简单的 API Mock 服务器,老生常谈哈?其实我是想讲 JSX, Mock 服务器只是一个幌子。我在寻找一种更简洁、方便、同时又可以灵活扩展的、和别人不太一样的方式,来定义各种 Mock API。后来我发现了 JSX 在领域问题描述的优势和潜力,当然这可不是空谈,我们会实际写一个项目来证实这个判断。
_sx_
2019/12/02
1.3K0
JSX AS DSL? 写个 Mock API 服务器看看
React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)
那么我们需要精简一下。注意原来的App.js我改成App.jsx。因为 React 使用 JSX 来替代常规的 JavaScript,所以用JSX比较好。
Vam的金豆之路
2021/11/30
1.5K0
React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)
使用React Hooks + 自定义Hook封装一步一步打造一个完善的小型应用。
Reack Hooks自从16.8发布以来,社区已经有相当多的讨论和应用了,不知道各位在公司里有没有用上这个酷炫的特性~
ssh_晨曦时梦见兮
2020/04/10
5.3K0
嵌入式linux之go语言开发(八)存储模块的封装(二)
由于在终端上,不需要执行复杂的sql查询,多表级联查询等。就是用来存储记录的,因此设计为存储到表里的都为二进制的字节流。
杨永贞
2020/08/04
5020
你不知道的前端 MVVM 模式中的数据层(万字长文,教你造轮子)
当今时代,React、Vue、AngularJS 三大框架横行,我们很难争论出哪个是最好的框架,但三者共同点是 MVVM 的模式,用一张简单的图可以看到,MVVM 模式最出色的是 ViewModel 层,ViewModel 帮我们摆脱了麻烦的 DOM 操作,相比 MVC 模式有了质的飞跃。
一只图雀
2020/11/19
1K0
你不知道的前端 MVVM 模式中的数据层(万字长文,教你造轮子)
【从零到一,C++项目实战】CineShare++(基于C++的视频点播系统)
项目功能:搭建一个共享点播系统,服务器能够支持用户通过前端浏览器进行访问,提供清晰的展示、观看和操作界面。该系统不仅可以实现视频的上传功能,还能满足用户观看视频的需求。同时,系统还具备基本的管理功能,包括视频的增、删、改、查等操作,以便管理员对视频内容进行有效管理和维护。通过此系统,用户可以便捷地上传和浏览视频,管理员则能确保内容的有序管理与更新。
南桥
2025/01/27
500
【从零到一,C++项目实战】CineShare++(基于C++的视频点播系统)
猿实战05——手把手教你拥有自己的代码生成器
哈哈,猿设计终于讲完了,接下来的一段时间,工厂君打算和大家一起来实现我们之间的设计——构建一个自己的电商系统来玩耍。嗯,这个可是一个大工程,代码量很大,业务也比较复杂,要搞就好好搞,代码方面还是需要一些规范的。
山旮旯的胖子
2020/08/31
7150
猿实战05——手把手教你拥有自己的代码生成器
推荐阅读
相关推荐
基于NodeJS的KOA2框架实现restful API网站后台
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验