0

0

后端开发:如何写出可靠的接口

步履不停

步履不停

发布时间:2019-06-26 18:19:47

|

3043人浏览过

|

来源于php中文网

原创

后端开发:如何写出可靠的接口

毕业进入现在的公司已近一年,完整参与了部门新项目两期的开发上线过程,作为一名后端开发,觉得最痛苦的是上线前和上线后的改 bug 阶段,面对各种突如其来、莫名其妙的bug,头昏脑涨、手忙脚乱、越改越懵,经常导致实验式改 bug、改一个 bug 又出现俩 bug 的之类的惨剧,我就忍不住想,为什么每次上线前都会有这么多bug呢?

前几天还读到一篇豆瓣文章,没有总结的就不是经验,只是经历。程序员也不能业务来了就写代码,有bug了就改bug,这样技术很难提升,也就难怪每次都会有那么多bug了。有的开发人员工作多年,接口还是时不时500,前期忙着写代码,后期忙着改bug,心累。

我从一期熟悉业务、框架,写一写边缘接口,到二期负责一个小模块,尝试数据库、程序的设计,中间磕磕绊绊,昨天也顺利上线,模模糊糊也感觉到了一些经验,于是努力总结下,虽然简单,也许能给自己和读者一些启发。(本文只针对初级水平,简单的bug,不涉及高并发、海量数据等复杂问题)

一. 接口为什么出bug?

辛辛苦苦写的接口,自己测的时候好好的,怎么别人一调就出错了呢??(此处应有表情包,请自行脑补)当然可能是运行环境的问题,不过程序统一部署在服务器上,这一般是架构师或者运维负责的工作,至于编程语言或者操作系统的问题,也通通不在今天考虑范围内,今天,我们只考虑自己写出的bug。

事实上,运行中的程序所涉及的,无非三样:资源(cpu、内存等)+ 算法(程序运行流程)+ 数据(用户输入、数据库、第三方接口等)。通常我们认为资源是可靠的,出现bug主要是由于算法的不可靠或者数据的异常。

更进一步,机器严格按照0/1执行指令,算法上一次执行正常,为什么这一次会失败?本质上还是因为数据变了,而算法没能覆盖此情况,因此,要想保证接口的稳定,主要从两方面考虑:保证数据的可靠性、算法的健壮性,而算法的健壮性也就是考虑到数据的各种情况,两者密不可分。

二. 如何写出bug更少的接口?

如前分析,数据的变化是接口bug最常见、本质的原因。而其中,用户输入又是数据变化最主要的原因。而程序必然要有用户输入,否则毫无意义。

编程界有句名言:永远不要相信用户输入。你永远不知道,用户会在一个期待姓名的输入框里都输入些什么。不要因为前端做了过滤你就放心,一方面是用户可能会使用爬虫等手段直接访问你的接口,另一方面,前端也是你的用户,沟通也存在误差,前端可能会使用错误的方式调用你的接口,而这种错误可能会更加隐蔽。

第一条建议:严格校验用户的输入,包括格式、内容。

我知道很多人都懒得去逐条检验用户输入,觉得只要功能正常就ok了,但是,这经常会导致后期改bug时投入更多的经历。经常测试提了bug,你查来查去,发现是前端传错了参数,或者没有合理限制用户输入,当然你可以很刚,让前端去改,但这个过程已经浪费了你大量的时间精力,还不如一开始自己做好检验,返回合适的错误消息,会为你后期节省大量的精力。

对于PHP等动态语言,尤其如此,例如我们使用Laravel框架,我会在所有接口入口处,首先使用$request->validate()检验所有输入数据的格式,如有必要,还会写代码进一步校验输入内容,比如时间范围、请求数据是否有效等等。

第二条建议:考虑用户的骚操作,重复提交、延时提交

重复提交应该是大多数后端都能想到的情况,也就是接口的幂等性,有些资源只能操作一次,必须进行校验,其实不仅是重复提交,还包括同一事件被两人重复处理的情况。

而对于延时提交,其实是测试给我提bug后我才意识到的问题模式。例如我们通过get接口返回给用户某种资源,用户可以通过post接口回传资源id并提交修改,由于是自己的get接口返回的,我们可能想着只验证id合法就行了,看似形成严格闭环,但如果用户停留在此页面延时提交,则可能在此期间资源过期,或者资源已被他人修改,而改用户也成功修改的bug。其实进一步思考,你会发现,这跟高并发情景下的资源失效有异曲同工之处。

Tome
Tome

先进的AI智能PPT制作工具

下载

第三条建议:检验数据库、第三方接口的返回数据

除了用户输入,常见的数据来源还有数据库、第三方接口。相对而言,这些数据接口会可靠的多,而且内容格式也更规范。不过为了接口的稳定性,最好也做一些检验。如常见的数据为空的情况,就要及时中止程序执行并抛出合适的信息。

对了,对于数据库,我还遇到过bug,就是主从延迟导致的数据更新问题,由于经验尚浅,这类问题不很擅长,就不再写。

第四条建议:程序算法尽可能覆盖异常情况

这条实际上是对前三条的补充,有些不合法的用户输入你可以直接中止程序并返回错误信息,但有些情况可能需要程序继续运行,进行特殊处理,这些情况你在程序设计之初应该尽量考虑周全,后期bug会少很多,也更容易维护。

三. 如何写出更高效的接口

最后,再写一点点关于关于接口效率、代码质量的思考。

1. 影响接口效率的主要是数据库操作
以我有限的经历来看,接口耗时长基本都是因为数据库操作不合理,我们大多数的业务代码并不会有性能问题。我见过不少在for循环里查询数据库的代码,一定要避免,我们可以先一次性取出所有数据,然后逐个去处理。例如我们会在框架层记录所有数据库操作,调试接口时即可看到所有数据库操作以及相应耗时,该合并的查询要合并,该优化的耗时查询相应去优化。

2. 合理使用Exception,日志

这条主要针对php语言,由于历史原因,我看到不少代码靠return中止程序并传递错误信息,这样在代码复杂、调用层次深了以后极难维护,远没有Exception机制直观方便。还有,重要信息一定要写日志,便于后期发现问题及调试,也可用来自证清白。

3. 代码要合理划分、抽象

不要复制粘贴代码,重复的功能要独立出来;设计时要合理考虑需求变更、扩展;写小而专注的函数,不要把复杂功能一坨实现;这样写的代码才易于修改、测试以及扩展。这块我做的也不好,上线后看自己的代码都是一坨一坨,难以维护,接下来还要多思考,多实践。

四. 结束语

祝大家写的代码都没有bug!

更多Laravel相关技术文章,请访问Laravel教程栏目进行学习!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

340

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

773

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

141

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

80

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

501

2026.03.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 13.2万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号