API风云录

好吧,我承认我是标题党,还是让我们从一个故事开始吧。

项目的业务逻辑层需要被设计成一个具备易扩展的模式,对外提供了大小相异的API。项目组人人头脑风暴,最后在各位的努力下,克服苦难,业务逻辑层被封装起来,一组最初的API被提供出来:

1、现有Service逻辑已经疏于管理,欠缺重构,变成了不易控制的逻辑层,接口众多,鱼龙混杂,难以规整出清晰、可用的接口给第三方(例如下游定制团队),怎么办?
Web应用有个特点,当你对代码的管理缺乏控制而搞不定时,可以在其上封装一层,这是一个通用的解决办法,也是一柄双刃剑。
正如某同事“我们都是工程商人”所述,心底里可能我们愿意追求代码的曼妙和清晰,但是大多数软件项目都应建立在“赚钱”的前提之上。
于是大家各抒己见,最终将原有Service之上的Facade改头换面,重新整顿了一把,变成了XXXManagementUtil。

2、有人考虑扩展方便,将这些API门面类中的方法参数,全部使用Event封装起来,这样的好处在于添加参数的情况下不必修改任何接口方法:

 

 

class UserManagementUtil{ 
    public UserInfo getUser(GetUserEvt); 
}
 

3、Event里面的参数哪些可选、哪些必选?应当满足怎样的取值规则?于是在Event的接口中引入了verify方法,子类中重写了toString方法,并利用Spring的AOP机制,在API调用时进行参数校验并打印日志。

4、API的接口应该根据什么来划分呢?
按照模型驱动来划分吧,有声音说,比如UserManagementUtil、SongManagementUtil。
可是更多的声音说:业务中有Song、Music等等二十多种内容类型,不觉得太庞大了吗?还是把Song、Music等发布的内容涉及到的API都归结到ContentManagementUtil和ContentExtManagementUtil里面吧,不要细分了。

5、API的接口粒度应该怎样控制呢?
有同事表示,提供简易的接口,就如同Windows提供的API一样,那么,我们提供基于模型的CRUD方法吧,这样方法既原子、纯净,通过外部调用者一定的组合,又能满足外部调用的功能。

6、怎样让API便于外部调用呢?
一开始要求外部使用Spring注入的方式来使用API的建议遭到了一些反对,我们不是要让调用方用得灵活方便、降低定制难度对吗?
又有一个声音说:把方法都变成static吧?于是又遭来一些反对的声音,static方法可能带来API中资源依赖和资源初始化的问题。
最后API外部的调用变成了下面这样,而API内依然由Spring来管理:

UserManagementUtil.getInstance().getUser(evt);
 

7、怎样让API便于定制人员理解呢?
需要强化API的JavaDoc,其中需要包含足够的方法功能和流程、参数以及返回值的说明。

……

于是大家大干一场,API渐渐新鲜出炉了,一切看起来是那么美好。

 

--------------------------------------------------------------------------------

 

不过数日之后,许多人渐渐开始发现,看起来那么美好的事情实际上好像也并不那么美好:

1、考虑到外部接口调用功能和性能的问题,通用和简单的接口已经完全无法满足业务需要,多次API调用可能意味着多次与数据资源交互,如果能把多次交互合并成一次(例如底层使用一次数据库连表查询实现),性能就可以大大提升。于是一些功能庞大的接口开始出现,并且愈来愈不受控制了。

2、方法参数Event的境遇如何呢?也不好。调用者并不十分清楚Event中哪些参数是必选的,那么,就把所有参数都传进去吧!于是API以外的Action层面到处是这样丑陋的代码:

 

 

GetUserEvt event = new GetUserEvt(); 
event.setAccountName("13000000000"); 
event.setAddress("xxx"); 
event.setType(xx); 
event.setAge(xx); 
……(此处省略N行)
 

3、verify方法呢?toString方法呢?
随着项目的进行,这些都变得不可控了,写一个简单根据ID来获取模型POJO的方法,就要写一个Evt,还有一堆冗长的verify和toString方法,开发人员变得不那么情愿,这两个方法就写得越来越简陋了。
更糟的是,这里用到的Spring的AOP方式还在项目中被发现为性能瓶颈,于是有更多的人开始怀疑最初这个决定的正确性了。

4、ContentManagementUtil和ContentExtManagementUtil变得非常庞大,困惑越来越多,一些方法也不知该往哪放了,比如getContentsByCategory方法,到底是放到ContentManagementUtil里呢,还是放到CategoryManagementUtil里呢?

5、JavaDoc变成了真正定制的瓶颈,定制人员不断表示无法读懂JavaDoc,不知道该怎样调用API;而开发人员呢,则不断抱怨JavaDoc工作量巨大,要把一个接口的JavaDoc写清楚,需要描述接口内部流程、参数名称、参数含义、使用场景、不同场景下需要哪些参数、返回对象含义、异常类型、异常返回码可能的取值、调用示例……一句话,变得无比困难。

6、需求变化频繁,当接口版本更新时,接口调用者发现,糟糕,原来的方法调用变得不可用了,但是是哪个参数不正确或缺失造成的呢?也没法看出来。

……

 

--------------------------------------------------------------------------------

 

这就是一个简简单单的API风云录,一段API诞生和撞到新秀墙的困惑史,一切看起来都很自然,也许你感到些许熟悉,我就说到这里,如果有一些感触,这些真实的记录就变得有价值。

我说完了。

……

 

可是我怎么甘心就这么“说完了”?

这不是我的风格。

我要痛批一顿?要引出所谓“真正正确”的做法?

当然不是!这样的事情还是留给专家学者去做吧。

 

--------------------------------------------------------------------------------

 

API的设计是软件架构设计的细化和缩影,是一件持续的工作,一样没有银弹,一样没有一劳永逸的可能。它历来是一个难题,无论在最初看似多么“完美”的规划和安排,最后都可能变成鸡肋;而且,看起来越强大、兼容性越好的设计,就越有可能打了水漂。

1、既然给不出一个完整和绝对正确的办法,API从诞生之日起,就需要开发人员不断对其修整和维护,使之不断适应当前应用需要,从而避免其老化。软件的架构需要维护,一个再出色的架构师完成了他的设计,如果开发团队不能贯彻并把基本的架构思想传递下去,项目一样还会偏离预想的轨道(不一定是好或者坏的结果,但通常都是不合预期的),这一点,API也一样,设计人员应当参与API一版版的发展和发布。
对于一些业务性很强的API,需要API编写的门槛会提高,需要开发人员理解API的原则,清楚细化了的要求。

2、设计一个易用、简单和清晰的API基本规则,在API发展的过程中,大小规模的重构不可避免且理所应当,基本规则就像软件架构一样,不会轻易变更,最初设定的规则越复杂,后续变更和成熟的过程越痛苦。重构本身就是版本发展的一部分,更多的特性应当在后续的重构中丰满,而不是在最初预留好一个准许“上帝功能”都能便捷扩展的能力。

3、保持基础接口的兼容性。JDK的HashTable有一个containsValue方法,还有一个contains方法,二者功能上完全一样,之所以搞这样两个完全一样的方法,正是由于历史原因造成的。JDK1.2才正式引入Java Collections Framework,抽象了Map接口,才有了containsValue方法,而之前的方法因为向下兼容的原因无法删除。我不能评估说这是一个好的兼容还是一个糟糕的妥协,但至少,JDK都为了保持了基础接口的兼容性而做了这样一件看似不合理的事。
有一种不激进的思路是,给一些将要废弃的接口置为@deprecated,待若干个版本后可以选择删除。

4、给API设计人员以充分的信任。API的设计不是民主选举,少数服从多数,把不可抗拒的要求和额外的需求陈述清楚,就不应过于干涉其组织的讨论。通常软件的设计都有这样一个惯性问题,不是最终采纳合理的方案、成熟的方案,而是采纳具备话语权的人的意见,或是经过民主式的妥协来完成设计。

5、严格控制接口数量。性能、可维护性,二者谁更重要?事实上这两者在很多情况下都是一组矛盾,平衡二者的关系才是设计者应当考虑的。如果把数个行为放置到一个接口中,当然可以提升性能,但是也增加了接口,增大了维护成本。尤其对于成熟的API来说,每增加一个接口都应是慎重的行为,如果项目组自我管理能力不够,就需要专人集中守护。

6、发布稳定和成熟的API。业界有一句玩笑话叫“不要使用3.0版本以下的软件”,正是说的这个道理,经过少数几轮迭代的API还远不稳定,而且可能还有众多bug,后续大规模的变更就会令API失去价值。如果由于不可抗因素,API变更实在太大,考虑提纯API的功能,尽量简单的方法,将复杂的关系条件交给调用方,会减小需求变更带来的冲击。

举例来说,UserInfo模型最初设计的相关接口有:

 

 

queryUserInfoByName(String name) 
queryUserInfoByAccountNumber(String accountNumber) 

 
但倘若模型变更频繁,那么可以考虑设计这样的接口:

 

queryUserInfo(Map queryCriteria) 

 
其中的参数QueryCriteria代表着了查询条件,比如这样调用:

 

 

queryUserInfo({name:"%abc%",accountNumber:"139%"}) 

 
(降低了可读性和调用的便捷程度,但提高了接口稳定性)

7、接口尽量独立,避免发布互相之间有依赖关系的接口。如果实在避免不了,最好让两个有依赖关系的接口放置在相近的地方,以便查看。

8、接口必须被完全理解,最好简洁易懂。如果接口复杂,那你可能寄望于详尽的JavaDoc来说明,如果接口简单,完全可以只需要很少的说明,成为自注释的。

 

最后我用一张Google API的截图结束本文:



 

 

文章系本人原创,转载请注明作者和出处

UE5游戏逆向实战:用FModel提取.pak文件中的3D模型(附Dumper-7避坑指南) 本文详细介绍了在UE5游戏逆向工程中使用FModel提取.pak文件中3D模型的实战技巧,包括Dumper-7工具的深度配置与避坑指南。针对UE5特有的unversioned属性系统,提供了从源码编译到智能注入的全链路解决方案,帮助开发者高效获取游戏资产并优化处理流程。 阅读详情

相关推荐

【Unity】Pico VR 开发实战:从环境搭建到交互实现

本文是一份详细的Unity Pico VR开发实战指南,涵盖从环境搭建到核心交互实现的全流程。详细讲解了如何集成Pico Unity Integration SDK与XR Interaction Toolkit,配置开发环境,并重点解析了手柄输入处理、射线交互以及VR UI操作三大核心模块的代码实现与优化技巧,帮助开发者快速上手Pico VR应用开发。

rice5的博客 1175

RTOS江湖风云录:从NASA火星车到你家智能插座,聊聊FreeRTOS、Zephyr这些‘门派’的崛起与恩怨

本文探讨了实时操作系统(RTOS)的发展历程与应用场景,从NASA火星车到智能家居设备,分析了FreeRTOS、Zephyr等主流RTOS的特点与优势。文章对比了不同RTOS的适用场景,帮助开发者选择最适合的解决方案,并展望了RTOS在物联网时代的未来趋势。

weixin_29215391的博客 203

解决倍福ADS通信错误1861和6:一次完整的TwinCAT3路由配置与故障排查实录

本文详细解析了在Linux系统上解决倍福ADS通信错误1861和6的完整流程,包括TwinCAT3路由配置与故障排查。通过实例演示了如何正确配置AMS NetID、使用adstool工具添加静态路由,以及高级网络抓包分析技巧,帮助工程师快速定位和解决通信问题。

weixin_30875157的博客 520

Java日志江湖风云录:那些年我们追过的日志框架

在Java诞生初期,程序员们过着"刀耕火种"的生活,所有日志都要靠System.out.println()手工雕刻在控制台石碑上。眼看Apache门派日渐壮大,Java皇族Sun公司坐不住了:"我堂堂官方,岂能没有自己的日志体系!1996年,欧洲安全电子市场项目组的Ceki Gülcü大侠,在调试代码时突然顿悟:"总用System.out太low了,我要打造一把绝世宝剑!Apache门派见江湖纷争不断,2002年又派出一位和事佬——JCL(Jakarta Commons Logging)。

飞行的Z 735

基于 LSTM 的船舶轨迹预测,单步预测

基于 LSTM 的船舶轨迹预测,单步预测

fyuhao的博客 1万+

如何使用AutoDl平台跑自己的模型(纯干货,步骤很详细)

记录我使用AutoDL云服务器来跑自己模型的全过程

qq_45073592的博客 3万+

【 Kubernetes 风云录 】- MutatingWebhook 实现自动注入

目的为了将链路上的所有服务在不调整控制器的前提下,为其运行的 Pod 自动添加特定的 label,目前考虑的方案是通过 MutatingAdmissionWebhook 实现,在 Pod 创建时动态注入指定的 label,从而实现统一标识和管理的目的。

ycloud 1155

【AFAC2026金融智能-赛题二】2亿像素的面条图,我切了1000刀拼回完美Markdown

摘要: AFAC2026金融智能创新大赛的「复杂金融文档还原挑战」任务是将高分辨率金融文档截图转换为结构化Markdown文本。面对2亿像素的“面条图”和严格的计算限制(禁用主流大模型,仅允许调用FinixDoc-VL API且模型需小于10M),作者提出四层流水线解决方案: 图像预处理:通过文本行投影检测在行间隙处智能切图,避免截断文字; API调度:5路并发轮询请求,结合内容哈希缓存与指数退避重试机制优化调用效率; 后处理:采用最长公共子串匹配去除文本重叠,并设计表格对齐算法修复跨块表格; 结果输出:按

170

LLM江湖风云录:模型选型、评测与优化完全指南

在大型语言模型(LLM)层出不穷的今天,如何为特定应用挑选最合适的模型,并最大化其性能,已成为开发者面临的关键挑战。本文将作为一份全面的实战指南,带领读者深入探索LLM的世界。我们将系统性地梳理LLM的多种分类维度,包括按模态、按开源与否、按输出类型及核心架构等。本文还将以Azure AI Studio为例,手把手展示如何利用云平台进行模型的筛选、评估与部署。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 898

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1362

20、微电网系统的系统框架、建模与控制架构解析

本文详细解析了微电网系统的系统框架、建模方法以及控制架构。文章首先介绍了在系统的系统(SoS)框架下,微电网如何通过微控制器(MC)和微电网中央控制器(MGCC)协调运行,并支持并网与孤岛模式下的高效能量管理。随后,针对微电网的关键组件,包括微涡轮机、光伏太阳能电池和风力涡轮机,提供了详细的数学建模分析。最后,探讨了微电网的控制架构设计,涵盖分层控制和共识控制策略,以实现系统的高效、稳定运行,满足日益增长的能源需求与市场要求。

elastic6hunter的博客 206

数据产业风云录:技术演进引领实践应用

数据应用是实现数据价值的最后一环。单纯的数据分析结果往往是报表和图表,只有与具体业务场景结合,形成可落地的解决方案,才能创造实际价值。例如,电商平台利用用户画像和推荐系统提升销售转化,金融机构通过风控模型和反欺诈系统降低坏账率,数据平台以API形式输出数据供第三方调用。

领码SPARK - 以无代码之星火,燎原数字之未来! 1256

[RK3568 Android12] 添加自定义启动脚本

1:定义添加的脚本 2:rk3568_s.mk 中定义打包 3:在启动脚本中init.rk356x.rc添加权限及何时启动 4:添加权限文件file_contexts 5:系统确认是否运行

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2220

江湖风云录:2025年全球AI大模型门派排名

在当今大模型的江湖中,OpenAI、Google DeepMind和Anthropic犹如三大武林盟主,凭借深厚的内功修为和独门绝技,牢牢占据着第一梯队的宝座。这三家公司的代表模型——o3 Pro、Gemini 2.5 Pro和Claude 4 Opus,不仅在技术实力上遥遥领先,更在商业应用和用户口碑方面树立了难以逾越的标杆。OpenAI:大模型江湖的开山鼻祖作为大模型领域的先行者,OpenAI的o3 Pro延续了GPT系列的技术优势,在推理能力、代码生成和创造性写作方面展现出惊人的表现。该模型采用了创新

zuiyuelong的博客 2687

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【AI总结】十年AI风云录:从Transformer到Agentic Coding(2015–2026)

从深度学习的星火燎原,到大模型的百舸争流,再到Agent编程的范式革命。十年间,AI从实验室的小众课题变成了重塑千行百业的通用生产力。本文按年梳理技术演进、产品迭代与产业格局的关键节点,完整复盘这一轮AI浪潮的来龙去脉,看懂每一次技术突破背后的逻辑与影响。2015年是深度学习从学术研究走向产业落地的关键转折点。这一年,ResNet解决了深度网络的训练难题,TensorFlow降低了行业的参与门槛,AlphaGo证明了AI在复杂决策上的潜力,国内国外的科技公司都在疯狂加注AI赛道。

AlienProgrammer的博客 436

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

AI圈五月风云录:资本热潮与产业落地并进

【AI行业动态摘要】2026年5月全球AI产业呈现多维发展态势:头部企业估值突破万亿,OpenAI与Anthropic形成B/C端竞争格局;马斯克整合xAI与SpaceX布局太空算力;商业化路径分化,海外主攻政企订阅,国内侧重普惠下沉;AI智能体崛起,转向主动服务模式;全球监管体系加速完善,中国强化伦理规范。行业从参数竞赛转向场景落地,面临算力能耗与盈利平衡等现实挑战,可持续发展需兼顾技术创新与合规底线。(149字)

weixin_41908519的博客 412

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

API通讯奇幻漂流:从村头小卖部的暗号到纵横四海的数据洪流

当你用手机App点亮家里的智能灯时,当你公司的财务系统自动从人事系统拉取数据时,你是否想过,在这看似简单的操作背后,是怎样一场精密而优雅的数字对话?本文将化身你的技术导游,开启一场关于API的奇幻漂流。我们将从你身边的局域网这个“新手村”出发,一路闯荡至浩瀚的互联网世界。你会弄懂SOAP、REST、GraphQL这些“江湖门派”的独门绝技,亲手搭建一个局域网内的“冷笑话电台”,并深入探讨如何为你的数字领地修筑“护城河”。这趟旅程,有干货,有故事,有实操,保证让你笑着进来,笑着出去,还顺带装走一肚子知识。

weixin_52473844的博客 844

“水货程序员闯关记:Java大厂面试风云录“

我擅长Java开发,对各种框架和工具都有一定的了解。:嗯,我知道Jakarta EE是Java EE的继任者。:我熟悉Java SE 11,因为它支持模块化,可以让我们更方便地管理和更新代码。:马小帅,你好,很高兴你能来参加我们的面试。:很好,那我们来聊聊Java吧。:Hibernate是全栈ORM框架,而MyBatis是半栈ORM框架。:Spring Boot可以让开发者快速启动项目,减少配置文件的使用。:好的,接下来我们聊聊数据库和ORM吧。:好的,现在很多项目都在使用微服务架构。你熟悉哪些测试框架?

zhaomh2017的博客 735

嵌入式操作系统风云录:历史演进与物联网未来Chapter1 第1章

Chapter1 第1章 认识嵌入式操作系统 操作系统和物联网是今天大众熟悉的二个专业技术词汇。人们拿起智能手机就想到绿色小机器人—谷歌的Android操作系统;使用电脑的时候就想到了Windows操作系统;当人们驾驶汽车时,使用ETC可以自动交费通过高速路的收费站;人们使用小米手环每天记录自己的运动步数,到了晚上,微信运动应用会自动将这些数据同步到云端...

weixin_34414650的博客 616

嵌入式操作系统风云录:历史演进与物联网未来第2章 Chapter2

第2章 Chapter2 嵌入式操作系统的历史 20世纪70年代末,嵌入式操作系统商业产品开始在北美出现,20世纪90年代末嵌入式OS的数量呈井喷式增加,最鼎盛的时候有数百种之多,即使经过30多年的发展和淘汰,现在嵌入式OS依然有数十种之多。最早的嵌入式操作系统是实时多任务操作系统(RTOS)内核,支持8位和16位微处理器,它初期使用汇编和PLM语言编程...

weixin_34405332的博客 913

AI江湖风云录:当DeepSeek遇上ChatGPT,谁才是语言模型的“六边形战士”?——揭秘两大语言模型的“武功秘籍”与“门派之争”

ChatGPT凭借OpenAI的深厚内功和全球知名度,像“全真教”一样稳坐“天下第一”宝座,擅长多语言、创意写作等“开放世界”任务。而DeepSeek则像“逍遥派”,以独特的中文理解、行业渗透和推理特化能力,专攻金融、医疗等“高难度副本”。两者在架构、成本、生态上各有优劣:ChatGPT是“通才”,适合多语言和创意需求;DeepSeek是“专精怪”,性价比高且垂直领域表现突出。

Albert_Roberts的博客 1156

免费用 GLM-4.7、Grok Code Fast 等顶级模型!50k+ Star 开源 AI 编程神器 OpenCode 火爆全网,白嫖党狂喜

摘要:本文介绍了AI开发者工具组合CodeRelay和OpenCode的使用体验。CodeRelay是一个聚合上百个AI模型的平台,提供Claude3.5、GPT-4o等主流模型,速度快且价格优惠,新用户注册可获25美元信用额度。OpenCode则是一个开源的AI编程代理工具,支持多种模型平台接入,具备代码阅读、修改、调试等功能。文章详细说明了安装方法和模型切换技巧,推荐开发者使用这组工具实现"编程自由",并提供了专属注册链接获取额外信用奖励。

qq_59534628的博客 2069

购书笔记

node相关 Node.js 实战(赵坤)

frontend的专栏 718

AI周览:GPT Image 2推理突破、模型偏科与国产生态爆发

多模态大模型与大型语言模型(LLM)正成为AI技术演进的核心。其原理基于Transformer架构,通过海量数据训练实现跨模态理解与复杂任务处理。技术价值在于将通用人工智能能力转化为可调用的API服务,极大提升了开发效率与应用创新速度。应用场景已从简单的文本生成扩展到图像深度推理、代码辅助编程及垂直行业解决方案。本周,GPT Image 2展示了视觉推理链的突破,而模型能力“偏科”现象则揭示了LLM在特定领域(如代码生成)的专门化趋势。同时,国产模型通过密集发布与OpenAI API兼容策略,正快速构建开发

weixin_34079177的博客 276

TSMaster【第一篇:武林大会邀请函——TSMaster修行总纲】

三电江湖风起云涌,TSMaster秘籍突现人间。今日华山之巅,各路英豪齐聚,且看这掌握新能源命脉的绝世武学,如何助诸位突破研发桎梏!扫描文末铁剑令牌,可获同星智能《TSMaster秘传心法》试读本(含VIP技术交流群通道)此修炼进度基于每日2时辰(4小时)专注修行,含同星智能官方修炼场实训。(答案将在后续"决战光明顶"篇揭晓)

优快云-新能源汽车研发测试专业博主 2084

开源4天狂揽45K星!Google Gemini CLI完整安装使用教程(含MCP集成指南)

开源4天狂揽45K星!Google Gemini CLI完整安装使用教程(含MCP集成指南)

qq_59534628的博客 6481
上一篇: API风云录
下一篇: 面向对象数据库和NoSQL
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值