怎么样去写一个好的接口(下)?(用ThinkPHP做示例)

上面已经堆叠了很多的分析内容,这里我以一个后端工程师的角度去编写实际的数据接口代码

简单的代码示例。假设需求是(修改文章 只能修改审核中状态)

1 编写接口文档。这里我演示使用的是apifox工具,也是个人开发习惯问题。其他工具也是可以的。

选择快速请求选项

选择请求方式、填写请求地址、填写请求所需要的参数、发送请求、获取到数据。

此时点击右上角保存中的【保存为接口】。

此时,只需要在修改文档中,将字段的说明文字补充完整即可。就这么简简单单的几步就搞定了接口文档的编写工作,so easy !!!

2 接收并验证数据的合法性

arduino 复制代码
Route::resource('article','index/article');  //文章相关业务

我们其实是创建好了一个资源路由的。

php 复制代码
class Article
{
    //对文章进行修改
    public function update($id){
        
    }
}

然后在update方法中处理具体的修改业务

scss 复制代码
$param = request()->param();   //接收请求中携带的参数

假设我们不做数据验证,全凭前端进行验证。那假设前端在请求中携带了status参数。

那么,文章主状态字段被一下干废了,史诗级事故就此开始。

所以我们要提取需要的字段,并进行数据合法性验证。

php 复制代码
    //开始进行数据验证
    $validate = \think\Validate::make([
        'title' => 'require|max:40',
        'content' => 'require|max:2000'
    ]);
    if (!$validate->check($param)) {
        return json(['code'=>40001,'result'=>$validate->getError()]);
    }
    //提取合法参数
    $data = [
        'title'=>$param['title'],
        'content'=>$param['content'],
    ];

这样就保证了只能修改到我们要求修改的字段数据了。

3 使用校验通过的数据,进行下面的业务处理

只能是审核中状态 也就是 status == 1 的时候才能对数据进行修改操作。而且考虑到有多人同时提交数据修改的情况的出现。

bash 复制代码
    //判断一下当前是否为允许修改的状态
    $result = 0;
    Db::transaction(function () use (&$result,$id,$data){
        $check_data = Db::table('article')->where('id', $id)->lock(true)->find();
        if($check_data['status'] != 1){
            return json(['code'=>40001,'result'=>'当前文章非可修改状态!']);
        }
        $result = Db::table('article')->where('id', $id)->update($data);
    });

    return json(['code'=>10001,'result'=>$result]);

因为有状态限制,所以修改数据之前,对当前id数据进行查询,并判断了状态。因为有多人同时提交的情况发生,所以开启了事务并进行了锁定操作。这样就完成了数据业务的处理逻辑。

其实很多时候,业务处理这部分很复杂,需要进行很多的各种情况的判断。这里只是通过最简单的示例来演示整个开发流程

4 完成接口的自测工作

对接口完成一下简单的自测,包括两个字段都为空,字段超出等情况的处理。请求成功以后,就可以放心的把接口交给前端工程师进行接口对接了。上面业务开发中,也补充了关键位置注释,保证接口有问题时候可以随时定位问题所在。

不管是新手还是有经验的开发者,你可以会这么写但是懒得这么搞,但是不可以不会。以上内容为个人经验编写,如果有不足的地方还是希望能给我提出来

相关推荐
考虑考虑1 小时前
MyCat2使用
java·后端·java ee
后端码匠1 小时前
Spring Boot3+Vue2极速整合:10分钟搭建DeepSeek AI对话系统
人工智能·spring boot·后端
可乐张2 小时前
AutoGen 技术博客系列 (九):从 v0.2 到 v0.4 的迁移指南
后端·llm
可乐张2 小时前
AutoGen 技术博客系列 (八):深入剖析 Swarm—— 智能体协作的新范式
后端·llm
计算机-秋大田2 小时前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
计算机毕设指导62 小时前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
华子w9089258592 小时前
基于数据可视化+SpringBoot+安卓端的数字化施工项目计划与管理平台设计和实现
java·spring boot·后端
橘猫云计算机设计2 小时前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django
2501_903238652 小时前
Spring Boot日志配置与环境切换实战
数据库·spring boot·后端·个人开发
WeiLai11123 小时前
面试基础--微服务架构:如何拆分微服务、数据一致性、服务调用
java·分布式·后端·微服务·中间件·面试·架构