技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-6.GO语言做通用CRUD接口-1

news/2024/5/10 1:50:24/文章来源:https://blog.csdn.net/myqq1418/article/details/121785605

技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-6.GO语言做通用CRUD接口-1

相关文章:
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-1.工具和本地环境
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-2.启动项目
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-3.接收json数据
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-4.连接mongodb数据库
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-5.跨域并跨域传输数据
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-6.GO语言做通用CRUD接口-1
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-7.GO语言做通用CRUD接口-2
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-8.模型的关联——无限层级分类
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-9.管理员及登录注册功能的实现
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-10.生产环境编译

1.什么是CRUD

CRUD是指在做计算处理时的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能。

目的是我们将常用的增、删、改、查操作封装在一套接口组件中,在多个功能中重复调用这一套接口组件,从而使代码更精简,同时提升开发效率。

2.接口优化准备

(1)数据模型:
在这里插入图片描述
这是两个表的数据机构的定义,当我们需要传输user表时,就要使用user结构封装传过来的form;当我们需要传输category表时,就要使用category结构封装form。
实际上我们封装的数据结构就是所谓的数据模型,所以我们在正式优化接口之前,可以先将两个数据库模型封装到models文件夹,使接口文件内更简洁易查。
先封装user模型:
在这里插入图片描述
接口文件中删除user表接口,同时引入命名空间:
在这里插入图片描述
下面使用到user结构的接口都把外部user的模型结构赋值给新的user,格式同样为type:
在这里插入图片描述
编译启动接口进行测试,外置模型导入成功:
在这里插入图片描述
在这里插入图片描述
以同样的方法外置category.go:
在这里插入图片描述
删除原定义的category结构模型:
在这里插入图片描述
使用到category模型的地方进行引入定义:
在这里插入图片描述
到此我们将全部的模型外置定义成功。
(2)比对文件中两个数据表的接口:
在这里插入图片描述
比对中我们可以看出,两个接口的不同点就在于数据表的表名和模型名不同,而各自的表名和模型名都用得相同,所以我们目前需要解决的就只有category和user这两个值得传入。

3.接口优化,RESTFUL风格的接口

rest是一种接口设计风格,大家感兴趣的百度查一查。下面我们直接代码讲解。
(1)首先看一下GIN框架对restful风格接口的说明:
我在百度搜的中文文档,应该是一个GO大神自己写的,切一下他的内容:
在这里插入图片描述
分别使用增(POST)删(DELETE)改(PUT)查(GET)的方法,对一个接口函数进行操作。
(2)修改server端路由地址接口:
修改前,接口杂乱,每个接口都对应一个操作:
在这里插入图片描述
修改后,只用四个接口方法,并针对其进行路由地址定义:

// 配置路由
func Main(e *gin.Engine)  {// 全局使用中间件e.Use(Cors())// 定义路由,调用接口函数// 增e.POST("/admin/api/rest/:resource", insert)// 删e.DELETE("/admin/api/rest/:resource/*id", delete)// 改e.PUT("/admin/api/rest/:resource/*id", update)// 查e.GET("/admin/api/rest/:resource", findAll)// 根据id查某数据e.GET("/admin/api/rest/:resource/*id", find)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

其中,使用到gin框架中的API接口参数的路由方法,冒号后传值,传入的第一个值resource为我们需要的表名(模型名),第二个值id(做到根据数据的id对数据进行删、改、查)。
接口路由路径解释:admin 端的接口 api 下面的 rest ful 风格api,携带参数资源 resource ,某些操作需要再加一个id
(3)修改路由方法:
将之前新定义的category方法都删掉,只留下增、删、改和两个查的方法,函数名分别对应配置好的路由接口中的函数名insert,delete,update,find,find_all。
先对insert方法进行修改:

// 插入数据
func insert(ctx *gin.Context){
<span class="token comment">// 解析api参数</span>
resource <span class="token operator">:=</span> ctx<span class="token punctuation">.</span><span class="token function">Param</span><span class="token punctuation">(</span><span class="token string">"resource"</span><span class="token punctuation">)</span><span class="token comment">// 连接mongodb服务</span>
url <span class="token operator">:=</span> <span class="token string">"mongodb://127.0.0.1"</span>
<span class="token comment">// 设置数据库一致性模式</span>
<span class="token comment">// 连接数据库操作,该操作赋值给session</span>
<span class="token comment">// err值必写,用于错误处理</span>
session<span class="token punctuation">,</span> err <span class="token operator">:=</span> mgo<span class="token punctuation">.</span><span class="token function">Dial</span><span class="token punctuation">(</span>url<span class="token punctuation">)</span>
<span class="token comment">// 后边程序执行的err与go程序比对,若有错误则返回错误内容</span>
<span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{<!-- --></span> <span class="token function">panic</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span> 
<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{<!-- --></span><span class="token comment">// 若没有错误,则在页面返回字符串,显示插入成功</span>ctx<span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span>http<span class="token punctuation">.</span>StatusOK<span class="token punctuation">,</span> <span class="token string">"插入成功"</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">// defer用法大家自行百度,我解释不清</span>
<span class="token keyword">defer</span> session<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment">// 设置数据库一致性模式,就当作打开数据库</span>
session<span class="token punctuation">.</span><span class="token function">SetMode</span><span class="token punctuation">(</span>mgo<span class="token punctuation">.</span>Monotonic<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span>
<span class="token comment">// 找到某数据库下的某数据表</span>
c <span class="token operator">:=</span> session<span class="token punctuation">.</span><span class="token function">DB</span><span class="token punctuation">(</span><span class="token string">"db_go"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">C</span><span class="token punctuation">(</span>resource<span class="token punctuation">)</span>
<span class="token comment">// 以上为连接数据库</span><span class="token keyword">if</span> resource <span class="token operator">==</span> <span class="token string">"user"</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">type</span> modelName models<span class="token punctuation">.</span>User<span class="token comment">// 使用user数据模型</span><span class="token keyword">var</span> form modelName<span class="token comment">// 如果传值格式不符合上方定义的结构,则返回错误信息</span><span class="token keyword">if</span> err <span class="token operator">:=</span> ctx<span class="token punctuation">.</span><span class="token function">Bind</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>form<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{<!-- --></span>ctx<span class="token punctuation">.</span><span class="token function">JSON</span><span class="token punctuation">(</span>http<span class="token punctuation">.</span>StatusBadRequest<span class="token punctuation">,</span> gin<span class="token punctuation">.</span>H<span class="token punctuation">{<!-- --></span><span class="token string">"error"</span><span class="token punctuation">:</span> err<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token keyword">return</span><span class="token punctuation">}</span><span class="token comment">// 此时&amp;form就继承了上方定义的结构格式</span><span class="token comment">// 插入数据,并将insert状态传值给err</span>err <span class="token operator">=</span> c<span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>form<span class="token punctuation">)</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> resource <span class="token operator">==</span> <span class="token string">"category"</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">type</span> modelName models<span class="token punctuation">.</span>Category<span class="token comment">// 使用user数据模型</span><span class="token keyword">var</span> form modelName<span class="token comment">// 如果传值格式不符合上方定义的结构,则返回错误信息</span><span class="token keyword">if</span> err <span class="token operator">:=</span> ctx<span class="token punctuation">.</span><span class="token function">Bind</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>form<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{<!-- --></span>ctx<span class="token punctuation">.</span><span class="token function">JSON</span><span class="token punctuation">(</span>http<span class="token punctuation">.</span>StatusBadRequest<span class="token punctuation">,</span> gin<span class="token punctuation">.</span>H<span class="token punctuation">{<!-- --></span><span class="token string">"error"</span><span class="token punctuation">:</span> err<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token keyword">return</span><span class="token punctuation">}</span><span class="token comment">// 此时&amp;form就继承了上方定义的结构格式</span><span class="token comment">// 插入数据,并将insert状态传值给err</span>err <span class="token operator">=</span> c<span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>form<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">// ctx.String(http.StatusOK, fmt.Sprintf(resource))</span>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_728059.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开发工具集】注册表相关说明及查询网站推荐——注册表字段说明网站

注册表相关项和字段的说明 Windows Resource Kit: Technical Reference to the Registry 以HKEY_LOCAL_MACHINE,点击就能看到关于HKLM的相关描述。 注册表根目录描述整理 注册表几个根目录的描述&#xff1a; 1. HKEY_CURRENT_CONFIG: 存储当前硬件配置文件的配置数据。 不…

wcag 2.0_如何使您的网站可访问:WCAG 2.1 W3C建议

wcag 2.0Web可访问性是开发网站或Web应用程序时要考虑的极其重要的方面&#xff0c;但是许多公司要么忽略了可访问性准则&#xff0c;要么不了解如何正确实施它们。 有人认为使网站可访问性是道德义务。 所有人&#xff0c;无论有能力还是有残疾&#xff0c;都应该能够使用互联…

如何使您的网站可访问:WCAG 2.1 W3C建议

Web可访问性是开发网站或Web应用程序时要考虑的极其重要的方面&#xff0c;但是许多公司要么忽略了可访问性准则&#xff0c;要么不了解如何正确实施它们。 有人认为使网站可访问性是道德义务。 所有人&#xff0c;无论有能力还是有残疾&#xff0c;都应该能够使用互联网并获得…

nuxt1迁移奥nuxt2_如何使用Nuxt和Cosmic JS建立电子商务网站

nuxt1迁移奥nuxt2我们将要建立的。 对于简单的购物网站&#xff0c;使用诸如Shopify或Woocommerce之类的功能强大的解决方案可能完全是徒劳的。 在本教程中&#xff0c;我们将使用Nuxt和Cosmic JS构建一个电子商务网站。 我们还将使用Buefy &#xff0c;这是Vue JS的UI组件库&…

如何使用Nuxt和Cosmic JS建立电子商务网站

我们将要建立的。 对于简单的购物网站&#xff0c;使用诸如Shopify或Woocommerce之类的功能强大的解决方案可能完全是徒劳的。 在本教程中&#xff0c;我们将使用Nuxt和Cosmic JS构建一个电子商务网站。 我们还将使用Buefy &#xff0c;这是基于广受欢迎的Bulma的 Vue JS的UI组…

react 组件开发_使用React和Cosmic JS CMS进行基于组件的网站开发

react 组件开发网站开发的一种常见方法是构建可在不同网页上重复使用的组件。 这种方法的好处是&#xff0c;通过管理组件而不是管理不同页面上的重复内容&#xff0c;您最终减少了重复工作。 流行JavaScript框架&#xff08;例如React&#xff0c;Vue和Angular&#xff09;在应…

使用React和Cosmic JS CMS进行基于组件的网站开发

网站开发的一种常见方法是构建可在不同网页上重复使用的组件。 这种方法的好处是&#xff0c;通过管理组件而不是管理不同页面上的重复内容&#xff0c;您最终减少了重复工作。 流行的JavaScript框架&#xff08;例如React&#xff0c;Vue和Angular&#xff09;在应用程序代码级…

程序员常用网站汇总(转载)

2019独角兽企业重金招聘Python工程师标准>>> 1. 社区 githubstackoverflowapacheinfoQ知乎相关专栏 知乎专栏推荐youtube相关频道利用以上网站的站内搜索&#xff0c;也许会获取更加满意的结果。 2. 各大IT公司技术博客 2.1 后端 阿里中间件团队博客美团技术团队博客…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起&#xff0c;安全威胁就一直伴随着网站的发展&#xff0c;各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击&#xff08;…

web开发过程_我如何创建网站:Web开发过程

web开发过程许多人&#xff0c;尤其是初学者&#xff0c;认为开发网站纯粹是关于编码的&#xff0c;但事实并非如此。 如果您想创建一个像样的网站&#xff0c;还需要做很多其他事情。 当您实际使用代码或WordPress或其他CMS创建网站时&#xff0c;这只是一小部分。 当您完全了…

我如何创建网站:Web开发过程

许多人&#xff0c;尤其是初学者&#xff0c;认为开发网站纯粹是关于编码的&#xff0c;但事实并非如此。 如果您想创建一个像样的网站&#xff0c;还需要做很多其他事情。 当您实际使用代码或WordPress或其他CMS创建网站时&#xff0c;这只是一小部分。 当您完全知道网站的外观…

[514]使用httpstat测试网站响应时间

httpstat是用Python写的脚本&#xff0c;可以用来测试http服务器的回应速度。 httpstat本质上就是封装了cURL工具&#xff0c;所以它可以接受各种 cURL的选项。&#xff08;-w、-D、-o、-s与-S除外&#xff0c;因为这些已经被 httpstat使用了&#xff09; 安装httpstat 下载脚…

极限编程xp12个最佳实践_立即搜索40个最佳在线学习编程的网站

极限编程xp12个最佳实践如果您不熟悉编码&#xff0c;那么您会很高兴听到网络上有大量有用的资源来帮助全新的程序员从头开始学习编程。 实际上&#xff0c;该行业中一些最好的程序员是自学成才 &#xff0c;没有计算机科学的正式学位。 使用这40个编码站点向您展示初始的编码…

vux flexbox使用_如何使用Flexbox建立专业网站

vux flexbox使用我在Web开发方面的经验 在与Flex-Box会面之前&#xff0c;我对CSS在Web开发方面的经验感到沮丧。 计算页面的页边距&#xff0c;宽度&#xff0c;对齐方式和高度的经验非常吸引人。 这使我的Web开发经验没有吸引力。 只有在特定属性中精确地输入数值的想法&…

react admin_下一个网站的10个React Admin仪表板模板

react adminReact是Web开发库中最流行的工具之一&#xff0c;但是就像您需要学习如何正确使用它一样&#xff0c; React是其中之一。 React与本机一起使用。 主要目的是使力量能够响应本机移动应用程序的开发。 React native在开发人员社区中很流行。 它拥有一个强大而充满激情…

将网站部署到github上_如何使用GitHub Actions将多个站点部署到Firebase

将网站部署到github上欢迎回来&#xff01; 在本教程中&#xff0c;我们将学习如何使用GitHub Action自动将多个站点部署到Firebase托管。 GitHub提供了与其存储库集成的免费增值工具&#xff08;对于开源免费&#xff09; 。 我将使用在本教程的第1部分中创建的Get Reacted R…

编程 繁体编码_现在该是开始学习编码的时候了:2020年学习编程的前20+个最佳网站...

编程 繁体编码我敢肯定&#xff0c;我们中的许多人都想知道如何在大流行后的世界中留住相关专业人员。 显然&#xff0c;其中一种方法是学习编程。 现在&#xff0c;该行业的增长率为21&#xff05;&#xff08;高于任何其他领域&#xff09;&#xff0c;很明显&#xff0c;对优…

python网站开发实例 flask_基于Python-Flask实现的网站例子

使用说明 使用Flask制作的普通企业网站前台后台 包括管理员登录&#xff08; 主要是后台文章发布的功能的实现&#xff09;&#xff0c;注意&#xff1a;使用对象 是 flask的初学者&#xff0c;说明文档有详细的教程&#xff0c;包括包的引用 &#xff0c;程序目录如何安排关键…

建立网站需要什么条件_角点科技告诉你营销网站搭建需要什么条件?

营销网站搭建需要什么条件&#xff1f;营销型网站就是指具备营销推广功能的网站,在开始建站的时候就已日后的推广作为目的。让每一个环节,每一步都考虑到营销功能的需求,让网站一上线就具有利于优化推广的特征。但是很多人不了解营销网站搭建需要哪些条件&#xff0c;接下来就与…

c++cmath无法打开_C-NCAP网站是操作失误,莫让低级失误影响专业权威

12月23日&#xff0c;中汽中心C-NCAP进行了一次侧面碰撞测试后&#xff0c;发生了一件奇事。C-NCAP网站丢了&#xff0c;打不开了。于是&#xff0c;不少人好奇心大起&#xff0c;各种猜测由此而生。截至到现在&#xff0c;中汽中心C-NCAP官网竟然显示"暂时无法访问"…