编程指南-学习建议编程指南-学习建议
首页
学习方向
技术学习
🚀 编程指南
首页
学习方向
技术学习
🚀 编程指南
  • 三、技术学习

    • 技术指南

      • 前端技术知识

        • 什么是前端?
      • 后端技术知识

        • 什么是缓存?
        • 什么是工作流技术?
        • 什么是反向压力?
        • 什么是热数据探测?
        • 数据库也能版本控制?
        • /tech-learning/guide/backend/how-search-engine-works.html
        • /tech-learning/guide/backend/learn-concurrency.html
        • /tech-learning/guide/backend/other-databases.html
      • 通用技术知识

        • 什么是前后端分离?
        • /tech-learning/guide/general/what-is-redirect.html
        • 什么是单例模式?
        • /tech-learning/guide/general/what-is-magic-value.html
        • 什么是负载均衡?
        • /tech-learning/guide/general/what-is-multi-env.html
        • /tech-learning/guide/general/what-is-magic-number.html
        • 什么是 Linux?
        • /tech-learning/guide/general/what-is-cloud-dev.html
    • 系统设计

      • 如何设计一个实时排行榜系统?
      • /tech-learning/system-design/elasticsearch-optimization.html
      • /tech-learning/system-design/file-upload.html
      • /tech-learning/system-design/log-system.html
      • /tech-learning/system-design/software-sword.html
      • 如何设计好 API 接口?
      • /tech-learning/system-design/sdk-development.html
      • /tech-learning/system-design/architecture-design.html
      • /tech-learning/system-design/release-stability.html
    • 开发经验

      • 解决 Bug 经验
      • 如何快速上手新项目?
      • /tech-learning/dev-experience/enterprise-software.html
      • /tech-learning/dev-experience/opensource-contribute.html
      • 什么是代码规范?为什么要遵循代码规范?
      • /tech-learning/dev-experience/company-standards.html
      • /tech-learning/dev-experience/code-reuse.html
      • /tech-learning/dev-experience/quick-website.html
      • /tech-learning/dev-experience/vscode-remote.html
      • /tech-learning/dev-experience/linux-vm-remote.html
      • /tech-learning/dev-experience/young-contributor.html
      • /tech-learning/dev-experience/no-force-shutdown.html
      • /tech-learning/dev-experience/no-hardcode.html
      • /tech-learning/dev-experience/backend-attention.html
      • 千万别直接敲代码!(写代码前要做的事)
      • /tech-learning/dev-experience/project-attention.html
      • /tech-learning/dev-experience/website-online.html
      • /tech-learning/dev-experience/tech-selection.html

如何设计好 API 接口?

API接口设计得好不好,直接影响系统的可维护性。今天分享一下设计接口的经验。

好的API长什么样

1. 命名清晰

看名字就知道这个接口是干什么的。

好:GET /users/{id}
坏:GET /getData?type=user&id=1

2. 符合RESTful规范

  • 用名词不用动词:/users,不是 /getUsers
  • 用HTTP方法表示操作:GET查询,POST创建,PUT更新,DELETE删除
  • 用复数:/users,不是 /user

3. 返回合理的状态码

  • 200:成功
  • 400:请求参数错误
  • 401:未登录
  • 403:没权限
  • 404:资源不存在
  • 500:服务器错误

不要什么情况都返回200。

4. 统一的响应格式

{
  "code": 200,
  "message": "success",
  "data": { ... }
}

不管成功还是失败,都用统一的格式,方便前端处理。

设计接口的步骤

1. 明确需求

这个接口要实现什么功能?谁来调用?

2. 设计URL

用什么HTTP方法?URL怎么命名?

3. 定义参数

需要传什么参数?参数放在URL里、Query里还是Body里?

4. 定义返回值

返回什么数据?什么格式?

5. 考虑异常情况

参数错误怎么办?数据不存在怎么办?没权限怎么办?

一些实用建议

1. 版本控制

接口可能会升级,加上版本号:/api/v1/users

2. 分页

列表接口要支持分页:/users?page=1&size=10

3. 字段过滤

有时候不需要返回所有字段:/users?fields=id,name

4. 文档很重要

用Swagger或者Apifox生成接口文档,保持更新。

5. 保持一致性

整个系统的接口风格要一致。比如时间格式、字段命名风格、错误码定义。

常见的坑

1. 一个接口做太多事情

一个接口又查询又更新又删除,太复杂了。

一个接口只做一件事。

2. 接口设计和数据库表一一对应

接口应该面向业务场景设计,不是面向数据库设计。

3. 随意改接口

接口一旦上线被使用,就不要随便改。要改就加新版本。

4. 没有文档

接口没有文档,前端只能靠猜或者问你。

最后

API设计是后端的基本功。

设计得好,前端用着舒服,后续维护也方便。设计得差,大家都痛苦。

多看看优秀的API设计(比如GitHub的API),学习别人是怎么设计的。

上次更新: 2025/12/7 09:34
Prev
/tech-learning/system-design/software-sword.html
Next
/tech-learning/system-design/sdk-development.html