API的设计在软件系统中的重要性不言而喻,在swift.org上看到一篇“API Design Guidelines”,虽然是就Swift而言,但对于其它语言也有不少可以借鉴的地方,在这里粗略翻译一二,作交流用途,比较随性,有些删改,如果需要看原文,请移步 https://swift.org/documentation/api-design-guidelines/  。

API设计指南

基本原则

  • 清晰,是第一要务。API方法和属性一处声明,到处调用,我们需要设计的使用起来简单明了。当我们评估一个设计的时候,单看其声明是基本不够的,通常需要置于具体使用场景,确保在使用时清晰明了。
  • 清晰远比简明重要。虽然代码可以写的紧凑,但是用最少的字符写最少的代码绝非我们的目标,如果说Swift代码简练,那也是强类型系统的一个副产品,可以减少样板代码。
  • 每个声明都进行文档注释。写文档可以加强对设计的深刻认知,不要拖延。如果发现自己不能简单地描述API的功能的话(bad smell),很可能存在设计问题。

(Swift代码注释建议,略去)

命名

用起来更加清晰

  • 包括所有必须的词语,以免混淆。
  • 忽略不必要的词语。命名中的每一个词语对使用者都有显著意义。
  • 对于变量名、参数名、以及参考类型名,应根据其角色命名,而不是其约束。
  • 对于弱类型参数信息进行补充,让参数角色更加清晰(比如参数名增加一个名词描述角色)。

力争使用流畅

  • 方法名或者函数名尽可能使用符合英语语法的形式。
  • 工厂方法名称以“make”开始。
  • 初始化方法和工厂方法调用时形成的短语应该不包含第一个参数。
  • 根据方法或者函数的连带结果进行命名。
    • 如果没有连带结果,应该是一个名词命名。
    • 如果有连带结果,应该是一个动词命名。
    • 可变和非可变方法成对命名时应该有一致的格式。
  • 对于不可变的布尔类型的方法或者属性,应该是断言的形式,比如 x.isEmpty 。
  • 描述事物的协议应该以名词进行命名。
  • 描述能力的协议应该以 able, ible, 或者ing作为后缀。
  • 其它的类型、变量、属性、以及常量的名词应以名词命名。

用好术语

  • 避免使用晦涩难懂的术语,尽可能使用通俗易懂的方法来描述。
  • 合理使用术语,术语应该用在恰当的地方。
  • 不要使用缩略语。

惯例

通用惯例

  • 复杂度不是O(1)的计算所得属性应该注释说明其复杂度。
  • 优先使用方法和属性,尽量减少使用函数。
  • 遵循大小写惯例,类型和协议的命名应该是首字母大写驼峰命名,其它的应该是首字母消息驼峰命名。
  • 方法名称可以共用一个基本名,如果这些方法有共同的基本含义。

参数

  • 利于文档注释,利于阅读。
  • 当隐含通常用法的时候,可以使用默认参数值。
  • 含默认参数值的参数应该置于参数列表的后面。

参数标签(Swift,略去)

特别说明

  • 闭环参数和元组成员应该设置标签(Swift)。
  • 谨慎使用无限制多态,以免重载的时候发生混淆。谨慎使用Any, All开头的名称。

API设计指南(译)的更多相关文章

  1. 组件接口(API)设计指南-文件夹

    组件接口(API)设计指南-文件夹 组件接口(API)设计指南[1]-要考虑的问题 组件接口(API)设计指南[2]-类接口(class interface) 组件接口(API)设计指南[3]-托付( ...

  2. REST API设计指导——译自Microsoft REST API Guidelines(四)

    前言 前面我们说了,如果API的设计更规范更合理,在很大程度上能够提高联调的效率,降低沟通成本.那么什么是好的API设计?这里我们不得不提到REST API. 关于REST API的书籍很多,但是完整 ...

  3. REST API设计指导——译自Microsoft REST API Guidelines(二)

    由于文章内容较长,只能拆开发布.翻译的不对之处,请多多指教. 另外:最近团队在做一些技术何架构的研究,视频教程只能争取周末多录制一点,同时预计在下周我们会展开一次直播活动,内容围绕容器技术这块. 所有 ...

  4. RESTful API 设计指南 (转)

    RESTful API 设计指南 2016-02-23 ImportNew (点击上方公号,可快速关注) 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2014/0 ...

  5. 来自HeroKu的HTTP API 设计指南(中文版)

    原文转自:http://get.jobdeer.com/343.get 来自HeroKu的HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国内 ...

  6. RESTFul API设计指南及使用说明

    RESTFul API设计指南及使用说明 一. 协议 API与用户的通信协议,使用HTTP协议. 二. 域名 应尽量将API部署在专用域名之下(http://api.example.com) 也可以将 ...

  7. RESTful API 设计指南,RESTful API 设计最佳实践

    RESTful API 设计指南,RESTful API 设计最佳实践 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). ...

  8. Rest Framework简介 和 RESTful API 设计指南

    使用Django Rest Framework之前我们要先知道,它是什么,能干什么用? Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Res ...

  9. [置顶] 来自 HeroKu 的 HTTP API 设计指南(中文版)

    转载:http://get.jobdeer.com/343.get 来自 HeroKu 的 HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国 ...

随机推荐

  1. C++ 函数部分(2)

    C++函数的递归调用 函数可以直接或间接地调用自身,称为递归调用.所谓直接调用自身,就是指在一个函数的函数体中出现了对自身的调用表达式,例如: void fun1(void) { //do somet ...

  2. SAP 常用增强记录文档

    转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...

  3. Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  4. CentOS 7下修改rabbitmq打开文件数量方法

    以下为使用systemd的修改方法:   1.系统层修改: 通过修改sysctl配置,提高系统的打开文件数量 vim /etc/sysctl.conf,添加: fs.file-max = 65535 ...

  5. silverlight子窗体操作数据库后刷新父窗体

    silverlight子窗体操作数据库后刷新父窗体 作者 Kant 写于 2011 年 07 月 02 日 分类目录 学习笔记, 所有文章 C# Silverlight 代码 刷新 学习 异步刷新 数 ...

  6. BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs

    BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2 ...

  7. BZOJ_2819_Nim_树状数组维护出栈入栈序

    BZOJ_2819_Nim_树状数组维护出栈入栈序 Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任 ...

  8. 《Spring Boot官方指南》(二)入门

    如果您刚开始接触Spring Boot,或者简称’Spring’, 这个部分对您来说非常有用.这个部分提供了“是什么?”,“怎么做?”和 “为什么?”的解释.您除了会阅读一份附带Spring Boot ...

  9. 【转】python中获得当前目录和上级目录

    原文地址:http://blog.csdn.net/liuweiyuxiang/article/details/71154346 获取当前文件的路径: from os import path d = ...

  10. STM32F4 DMA2D_M2M_PFC

    此例程为STM324x9I_EVAL:DCMI_CaptureMode,使用的stm32f4xx_hal_driver, At each camera line event, the line is ...