AI时代的程序员修养:接口不是 URL,是系统契约
📅 2026/7/15 16:05:09
👁️ 次浏览
《AI时代的程序员修养》前四篇讲了程序、数据结构、执行模型和模块通信。从这一篇开始,进入“把功能做成能扛流量的服务”这一卷。第一件事是接口。AI 写接口很快。给它一句“实现用户查询接口”,它能马上生成路由、参数、ORM 查询和 JSON 返回。问题是,接口最重要的部分不是 URL,也不是 handler 里那几行代码,而是系统对调用方做出的承诺:字段长什么样,错误怎么算,能不能重试,权限怎么判,版本怎么演进,旧客户端会不会被新字段打坏。接口不是 URL,是契约。契约没写清楚,代码越快生成,后面越难收拾。URL 只是入口很多接口设计讨论会停在这一层:GET /api/users/{id} POST /api/orders GET /api/orders?page=1page_size=20这些当然要设计,但它们只是入口。真正的契约至少包括:请求参数和字段类型。字段是否必填,默认值是什么。返回结构是否稳定。错误码和错误语义。权限要求。幂等规则。分页和排序规则。限流和超时边界。版本兼容策略。示例参数和示例响应。可观测字段,如request_id、trace_id。AI 生成接口时,最常见的问题是“看起来能调”。能调不代表能用,更不代表能长期维护。比如一个查询工具调用历史的接口,如果只写:GET /tool-history?user_id=xxx它没有说明很多关键问题:只能查自己的历史,还是管理员可以查所有人?时间范围有没有上限?默认排序是什么?返回字段里是否包含敏感参数?分页是 page/page_size,还是 cursor?tool_id搜索是精确匹配还是模糊匹配?没有结果时返回空列表,还是 404?查询太慢时返回什么错误?这些不明确,前端、后端、测试和数据分析都会各自猜一套。先写 schema,再写 handler接口契约里最基础的是 schema。schema 不是“文档装饰”,它应该约束代码。以创建订单为例,一个随手写的请求可能是:{ "user_id": "u_123", "items": [ {"sku": "book_001", "count": 2} ], "coupon": "NEWUSER" }但契约必须更明确:{ "user_id": "string, required", "items": "array, required, 1..100", "items[].sku": "string, required, max 64", "items[].quantity": "integer, required, 1..999", "coupon_code": "string, optional, max 64", "client_order_id": "string, required, max 128" }这里有几个小变化很关键。count改成quantity,语义更清楚。items有长度上限,避免一次请求塞进几万行。quantity有范围,避免 0、负数或离谱数字。client_order_id用于幂等,避免客户端重试创建重复订单。如果用 Python,可以把 schema 直接写成模型:from pydantic import BaseModel, Field class OrderItemIn(BaseModel): sku: str = Field(min_length=1, max_length=64) quantity: int = Field(ge=1, le=999) class CreateOrderRequest(BaseModel): user_id: str = Field(min_length=1, max_length=64) items: list[OrderItemIn] = Field(min_length=1, max_length=100) coupon_code: str | None = Field(default=None, max_length=64) client_order_id: str = Field(min_length=1, max_length=128)这段代码不复杂,AI 也能写。重点是你要在 prompt 里要求它先定义契约:先不要写 handler。 请先定义请求和响应 schema,说明每个字段的类型、必填、默认值、长度范围、枚举范围和业务含义。 schema 通过后再写接口实现。没有 schema 的接口,就像没有类型的系统边界。小项目可以靠记忆,大系统只能靠约束。响应结构要稳定接口返回值最怕“今天想起来加一个字段,明天顺手改一个结构”。一个比较稳的列表响应通常长这样:{ "items": [ { "id": "order_123", "status": "paid", "total_amoun
1999 年,我写的是银行前置机和 socket。
那是一种很硬的经验。SCO UNIX、生产系统、交易链路、超时、日志、故障边界。它教人谨慎,也教人知道系统不是玩具。
到了 2000 年,场景突然换了。
我来到北京。
城市换了,行业的空气也…
📅 2026/7/15 16:05:09
G-Helper终极指南:3步轻松替换臃肿的华硕Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…
📅 2026/7/15 16:05:09
HunterPie游戏数据覆盖插件:5分钟掌握《怪物猎人:世界》终极监控工具 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/g…
📅 2026/7/15 16:04:09
说实话,以前做本地SEO,大家总觉得靠堆关键词、搞外链就能搞定。现在?别逗了。百度和各大平台算法早就进化了,尤其是Geo(地理位置)相关的搜索,逻辑完全变了。今天不整那些虚头巴脑的理论,我就聊聊最近我帮一个朋友做ai geo优化排名时的真实踩坑经历。这玩意儿要是搞不好…
📅 2026/7/15 17:05:20
1. 这不是偷懒,是数据科学里最被低估的生产力杠杆“Copy and Paste Programming in Data Science”——光看标题,很多人第一反应是皱眉:这算什么正经技术?不就是CtrlC/CtrlV嘛,连写代码都算不上,还值得专门…
📅 2026/7/15 17:04:46
如何快速掌握JavaCC解析器生成工具:5分钟完整指南 【免费下载链接】javacc JavaCC - a parser generator for building parsers from grammars. It can generate code in Java, C and C#. 项目地址: https://gitcode.com/gh_mirrors/ja/javacc
JavaCC是一款强…
📅 2026/7/15 17:04:46
1. UART串口通信基础认知 第一次接触FPGA串口通信时,我盯着示波器上跳动的波形看了整整两天才明白:原来UART就像两个人在黑暗中用闪光灯打摩斯密码。发送方突然把手电筒熄灭一下(起始位),然后快速闪烁8次传递信息&…
📅 2026/7/15 17:04:46
3分钟掌握开源条码字体:Libre Barcode完全指南 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode
还在为复杂的条码生成软件烦恼吗?Libre …
📅 2026/7/15 17:04:46
BaiduPCS-Go架构解析:命令行网盘客户端的工程实现 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go
BaiduPCS-Go作为基于Go语言开发的百度网盘命令…
📅 2026/7/15 17:04:46
1. COM线程模型基础与CoInitializeEx核心作用在Windows平台开发中,组件对象模型(COM)的线程处理机制一直是开发者必须掌握的底层知识。作为COM初始化的门户函数,CoInitializeEx不仅决定了对象在何种线程环境下运行,更影响着整个组件的并发性能…
📅 2026/7/15 0:00:17
1. 为什么M芯片Mac用户需要降级到Monterey? 去年刚拿到M2芯片的MacBook Pro时,我第一时间升级到了Ventura系统。结果第三天就遇到了微信闪退、Final Cut Pro渲染卡顿的问题。后来在开发者论坛发现,不少专业软件对Ventura的适配都存在问题。这…
📅 2026/7/15 0:00:17
1. 背景与核心概念在AI大模型快速发展的今天,许多开发者和研究者都面临一个现实问题:如何在有限的硬件预算下实现高效的本地大模型部署。特别是对于个人开发者和小型团队来说,购买最新的高端显卡成本高昂,而利用现有的或二手硬件资…
📅 2026/7/15 0:00:17
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/15 14:09:20
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/15 2:24:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56