strapi系列--如何自定义非界面化的接口,定制化自己的业务逻辑

news2024/11/18 18:40:51

为什么要进行后端定制呢?

在实际开发过程中,项目中有些需求是不需要创建界面化接口的,需要我们定制化自己的业务逻辑,那么我们该如何处理这个需求呢?本文以图文并茂的形式,定制一个我们自己的业务逻辑接口。

Strapi后端的每个部分都可以定制:

  • Strapi服务器收到的请求
  • 处理请求并触发控制器处理程序执行的路由
  • 可以阻止访问路由的策略
  • 中间件可以在向前移动之前控制请求流和请求
  • 一旦到达路由就执行代码的控制器
  • 用于构建控制器可重用的自定义逻辑的服务
  • 模型是内容数据结构的表示
  • 发送给应用程序的响应

详情可参考文档:https://docs.strapi.io/developer-docs/latest/development/backend-customization/controllers.html#adding-a-new-controller
想要自定义一个接口,我们至少需要routes和controllers两个部分来实现,但是我们还可以添加Service 来协助controller负责其他业务逻辑处理
每个controller里面的action都可以是一个异步或同步函数。每个操作都接收一个上下文对象(ctx)作为参数。CTX包含请求上下文和响应上下文。

Controller 和 Service

  • Controller 负责搜集参数、调用服务、转发或重定向结果集,
  • Service 负责其他业务逻辑处理

开始创建

举例:我们需要创建public-info相关的接口

我们在src\api目录下创建这些文件

路由文件

src\api\public-info\routes\public-info.ts
这里暂时设置为公共接口,用来测试,后续会写其他文章来讲解如何配置权限

module.exports = {
    routes: [
      {
        method: 'GET',
        path: '/public-info',
        handler: 'public-info.getPublicInfo',
        config: {
          auth: false,
        },
      },
    ],
  }

Controller文件

src\api\public-info\controllers\public-info.ts

module.exports = {
  getPublicInfo: async (ctx, next) => {
        ctx.body  = await strapi.services['api::public-info.public-info']['getPublicInfo'](ctx.query)
  },
}

Service文件

src\api\public-info\services\public-info.ts

module.exports = () => ({
  getPublicInfo: async (data) => {
    return {publicInfo: 'test message'}
  },
})

创建完毕以后,我们启动服务,进行测试

访问接口http://localhost:1337/api/public-info

  • 接口返回格式我们也可以通过使用middlewares来设定所有的接口返回统一包装格式~后续会添加文章进行讲解

我们还可以添加参数来进行测试~

src\api\public-info\services\public-info.ts

大功告成~~

  • 今天就写到这里啦~小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

blender 应用物体变换的作用

编辑模式和物体模式操作的区别 旋转 在物体模式下旋转时物体旋转值会发生变换** 在编辑模式下旋转时物体不会发生变化** 缩放 在物体模式下缩放会导致缩放尺寸发生变化 在编辑模式下缩放时,缩放属性不会发生变化 应用物体变换 把物体模式下的缩放旋转变换应…

Android---TabLayout

目录 TabLayout TabItem ​编辑 演示效果的xml TabLayout TabLayout 在开发中一般作为选项卡使用,常与 ViewPager2 和 Fragment 结合起来使用。 常用属性: app:tabBackground 设置 TabLayout 的背景色,改变整个TabLayout 的颜色&#xf…

绪论的习题

刘佳瑜*,王越 *, 黄扬* , 张钊* (淮北师范大学计算机科学与技术学院,安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. 🌞欢迎来到机器学习的世界 🌈博客主页&#xff1…

idea调试常用的快捷键

一、F7 步入调试,进入当前函数内部。 说明: 如果步入的是自己编的函数,可读性会好很多。 如果是系统函数,我个人目前水平,觉得很难读。而且idea系统已编写好的函数,除非是研究源码,否则感觉…

javaweb08 javaweb、tomcat、maven简介、servlet原理和实例、Mapping映射、请求转发和读取properties文件

文章目录一、javaweb简介二、Tomcat三、Maven四、Servlet简介和HelloWorld五、Servlet原理六、Mapping映射七、ServletContext八、请求转发九、读取资源文件properties一、javaweb简介 在java中,动态web资源开发的技术成为javaweb 人们访问到的任何一个网页和资源…

C语言字符串库函数模拟实现

字符串检验 strlen 函数原型 /// brief 返回给定空终止字符串的长度,即首元素为 str 所指,且不包含首个空字符的字符数组中的字符数 /// param str 指向要检测的字符串的指针 /// return 字符串 str 的长度 size_t strlen( const char *str );空终止字…

C语言实现通讯录静态版本

通讯录中首先要有人的信息,然后是存放多少个人的信息 再丰富一下通讯录的功能,例如增删查改、显示、排序。 我们分三个文件来实现。 1、实现简易的菜单,通讯录的整体逻辑 #include"contact.h"void menu() {printf("*****…

900页文档比对只需5分钟?鸿翼InWise文档比对,以人工智能撬动办公效率杠杆

在日常办公中,多份文件间的检查、纠错、复核工作不可避免,这类工作往往具有很强的重复性,占用了大量的工作时间。鸿翼InWise平台文档比对能够赋能企业极速完成海量文档、图片的高精度比对,以人工智能撬动企业生产力提升。 随着数字…

MySQL调优-MySQL索引深入总结

目录 MySQL索引深入总结 InnoDB中的索引复习 聚集索引/聚簇索引 问题:如果我们没有定义主键呢? 问题:分析一下B树三层和四层的性能差异? 辅助索引/二级索引 回表 问题:为什么我们还需要一次回表操作呢?直接把完…

亚马逊云科技:小鹏汽车拓展全球市场,跑出“加速度”

汽车产业变革走向下半场,智能汽车的市场份额之争也从国内走向国际,出海之战讲求速战速决,小鹏汽车携手亚马逊云科技拓展海外市场,完成海外布局。 扩大“鹏”友圈,迈进欧洲市场 近年来,小鹏汽车不断推进全…

数字人民币年度总结:支付变革未停、试点之风再起

文/尹宁出品/陀螺研究院数字人民币,无疑是近年来热度最高的词汇之一,作为我国法币的数字形式,至其出世伊始,不论是资金溯源的透明追踪、零售更新的消费用途,还是跨境结算的雄图大略,围绕其推广与意义的讨论…

关于 国产麒麟系统上长时间运行Qt程序根目录/下磁盘空间占用100%导致无法写入 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128671382 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

LeetCode 129. 求根节点到叶节点数字之和

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 129. 求根节点到叶节点数字之和,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名…

4.6 集成运放的使用

一、使用时必做的工作 1、集成运放的外引线(管脚) 目前集成运放的常见封装方式有金属壳封装和双列直插式封装,外形如图4.6.1所示,以后者居多。双列直插式有 8、10、12、14、16 管脚等种类,虽然它们的外引线排列日趋标…

laravel JWT 用户认证 实现API认证

JWT 是 JSON Web Token 的缩写,它是一个规范,让用户和服务器之间传递安全可靠的信息。 JWT介绍 JWT 由头部(header)、载荷(payload)与签名(signature)组成 { “typ”:“JWT”, “a…

python的8大核心语句,你确定不来看看嘛,那格局就小啦

Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战…

学习使用 Clion 第一次使用Clion开发Qt的hello world

为什么使用Clion之前在window上开发软件基本上是使用VS2022,使用Clion在windows上开发并不是嫌弃VS2022不好用,相反我依然觉得VS是世界上最好用的IDE没有之一.没有其他的理由,这是我第一款使用的IDE,而且已经很使用的熟练.那为什么还要学习使用Clion了,其实是考虑到跨平台.VS有…

【C进阶】 字符串函数和字符分类函数

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Linux操作系统-信号

信号的基本认识&#xff1a;Linux信号机制&#xff1a;它是一种异步的通知机制&#xff0c;用来提醒进程一个事件已经发生。如上图&#xff0c;Linux操作系统中&#xff0c;共有编号为1~31的31个普通信号&#xff0c;编号为34~64的31个实时信号。日常中只会涉及和使用到普通信号…

说说你对Spring三级缓存的理解

这个问题或者换个问法&#xff1a;Spring是如何解决循环依赖的&#xff1f;答案即是Spring的三级缓存 什么是循环依赖&#xff1f; 简单说&#xff0c;就是A对象依赖B对象&#xff0c;B对象⼜依赖A对象&#xff0c;类似的代码如下&#xff1a; 其他还有很多种⽅式&#xff0…