diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a82da52d73edbb03f18f944df1e77fafeeef54a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# General +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/zh-cn/design/API-Review-Template.md b/zh-cn/design/API-Review-Template.md new file mode 100644 index 0000000000000000000000000000000000000000..0c7dacf02ef71c1ff7a2ab77afdddcb0d355bb74 --- /dev/null +++ b/zh-cn/design/API-Review-Template.md @@ -0,0 +1,137 @@ +# OpenHarmony xxx子系统 xxx API评审申请 + +## 背景 + +* API类型:[Public API | Test API| HDI] +* API需求来源: +* API使用场景: +* API所属子系统: +* API预计发布版本: +* Contributor: +* 本次评审涉及的API数量: + +| 类型 | 数量 | 编程语言 | +|---|---|---| +| 新增 | | | +| 行为变更 | | +| 废弃 | | | +| 删除 | | | + +## API说明 + +### 必要性说明 + +> 现状与差距分析。API的使用场景和价值是什么? + +### 总体特性说明 + +> 相关API完成了哪些功能特性。 + +## 评审结论 + +### Committer评审结论 + +### 领域SIG评审结论 + +## 自查表 + +| 自查项 | 自查结果 | +|---|---| +| 是否已完成拼写检查? | | +| 是否遵循了编码规范? | | +| 词性使用是否正确(名词,形容词,副词)? | | +| 命名是否完整表述了API所做的全部逻辑?| | +|API的参数数量是否合理?(通常少于7个)| | +|是否合理使用了缩写?(缩写是大家周知的)| | +|void类型API是否真的考虑过调用者不需要返回值?| | +|是否考虑过继承体系是合适的?父类的每一个方法都适用于子类| | +|已定义的错误状态是否完备?| | +| 命名是否正确使用了对仗词:
add/remove, create/destroy, insert/delete, start/stop, begin/end,
send/receive, up/down, show/hide, open/close, source/target,
source/destination, increase/decrease, first/last, next/previous | | +|新增API与同模块既存API表述和语义层次是否一致?| | +| 同步API是否需要提供异步版本? | | +| 是否每一个public API都真的是开发者需要的?| | + +## API接口及说明 + +> 请填写代码的提交地址。 + +* 代码地址: + +## API权限设计 + +> 使用该接口是否需要申请相应的权限。 + +## API隐私保护设计 + +> 涉及用户隐私,需要考虑隐私保护。 + +## 开发者指南 + +> 可选。 + +## API代码示例 + +> 二选一即可。 + +* 代码地址: +* 代码片段: + +## API变更说明 + +> 新增接口不需要填写此章节。 + +### 行为变更 + +> API行为变更是指API的接口没有发生变化,仅仅是行为发生变化。 +> API行为变更需要在新的API版本上进行,不允许破坏旧版本API行为(除非是缺陷修复)。 + +#### 相关接口 + +#### 变更原因 + +### 废弃接口 + +> 废弃接口的API说明中,需要添加`@deprecated`注解进行(包括:JS/TS/C/C++接口)标记。 + +#### 相关接口 + +> 需描述从哪个版本开始标记为废弃。 + +#### 废弃原因 + +#### 替代接口 + +> 如果有则提供,如果无则说明原因。 + +### 删除接口 + +> 接口不允许直接删除,需要在标记废弃之后经过5个API版本才允许删除。 + +#### 相关接口 + +#### 删除原因 + +#### 替代接口 + +> 如果有则提供,如果无则说明原因。 + +## DFX + +### 兼容性 + +### 性能 + +### 功耗 + +### 可靠性 + +### 可测试性 + +> API必须同步交付API自动化测试用例,用例100%覆盖API接口。 + +## 评审结论 + +* 评审时间: +* 与会人: +* 评审结论:[通过|不通过] +* 评审会议纪要: \ No newline at end of file diff --git a/zh-cn/design/OpenHarmony-API-governance.md b/zh-cn/design/OpenHarmony-API-governance.md index a0568c0e539c15bc929e0c2a4cbaaeb06978c8c6..b16a693ce1f6037d11f00bae97e971734da9f115 100755 --- a/zh-cn/design/OpenHarmony-API-governance.md +++ b/zh-cn/design/OpenHarmony-API-governance.md @@ -1,29 +1,48 @@ # OpenHarmony API治理章程 +## 总览 +为了引导OpenHarmony生态健康、有序发展和演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。 -## 总览 +本章程由[API SIG](https://www.openharmony.cn/SIG/api/)制定,经[PMC](https://www.openharmony.cn/community/pmc/)批准发布;本对章程的修订必须经由API SIG评审后,由PMC批准发布。 + +## 概述 + +### 范围与定义 + +OpenHarmony软件栈中包含了多个角色,因此API也分作多种类型。 + +不同的API类型其兼容性要求也不一样,具体如下表所述: -为了引导OpenHarmony应用生态健康、有序发展演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。 +| 类型 | 提供者 | 使用者 | 兼容性要求 | 看护手段| +|---|---|---|---|---| +| Public API | 系统与框架 | 所有应用开发者 | 5个API版本| XTS| +| Test API | 测试框架 | 所有应用开发者| 3个API版本| 待构建 | +| System API | 系统与框架 |系统应用开发者 |不承诺| 待构建 | +| HDI | HDF| 系统服务 | 4个API版本| XTS | +| Driver API | HDF | 驱动开发者 | 不承诺 | 无 | +| Inner API | 系统部件 | 系统部件 | 不承诺 | 无 | -本章程由API SIG制定,经PMC批准发布;本对章程的修订必须经由API SIG评审后,由PMC批准发布。 -## API范围与定义 -应用程序接口(API)位于应用层和框架层之间,是由操作系统预定义的、由框架层和系统应用提供给应用(包括系统应用和三方应用)开发使用的类、方法等用户程序编程接口;不包括OEM扩展接口。 +各类型API说明如下: -![](figures/API-Scope-And-Definition.png) +* Public API:OpenHarmony对所有应用开发者公开的API。 +* Test API:测试专用的API,供开发者使用。 +* System API:提供给系统特权应用使用的API,普通应用无法使用。 +* HDI:描述硬件能力的接口。 +* Driver API:提供给驱动开发者使用的接口。 +* Inner API:系统服务和框架实现彼此调用的API,仅供系统内部使用,不承诺兼容性。 -OpenHarmony API按可授权使用方分类包括: -- Public API:公开发布,提供给三方应用开发使用的API。 -- System API:非公开发布,仅授权平台签名应用(signature)、预置特权应用(privileged)使用的API。 -- Test API:受限发布,仅适用于xTS或应用调试阶段可使用的API。 -

如无特别说明,本章程定义的条款同时适用于Public API、System API或Test API等三种OpenHarmony API。针对System API和Test API的额外要求或例外说明,通过特别说明方式加以补充说明。

+### API与编程语言 -OpenHarmony API按编程语言分类包括: -- JS API:面向应用开放的JavaScript编程语言接口。 -- Native API:面向应用开放的C/C++编程语言接口。 -

如无特别说明,本章程定义的条款同时适用于JS API和Native API。

+OpenHarmony的目标是构建面向万物互联时代的新一代操作系统,其实现涵盖但不限于以下编程语言: + +* C/C++ +* JavaScript +* TypeScript + +本章程所描述的内容与编程语言无关。即:在不违反编程语言要求的情况下,API不分编程语言都要遵守章程的要求。 ## API治理 @@ -33,24 +52,26 @@ OpenHarmony API按编程语言分类包括: | - | - | |Contributor|API的设计和交付主体,负责API相关的代码与设计文档提交。| |Committer|API相关的代码评审,涉及API提交预审。| -|领域SIG|

新增API相关的代码提交评审,领域SIG评审通过即可合入。

变更API相关的代码提交预审。

| +|领域SIG| 新增API相关的代码提交评审,领域SIG评审通过即可合入。
变更API相关的代码提交预审。| |API SIG|变更API相关的代码提交评审。| |PMC|API Version计划发布、API治理章程修订评审发布等。| ### API评审流程 API评审流程如下: -![](figures/API-Review-Process.png) + 主要过程说明: -1. API评审申请、代码提交(Owner:Contributor),除代码提交外,如果涉及API新增或变更需同步提交相应的API设计文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、领域SIG、API SIG等相关人员预审。 -1. 代码评审(Owner:Committer),代码评审和API预审,涉及API提交CodeReview通过后,还需要进一步领域SIG评审。如果单次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Committer评审,只有所有对应领域的Committer都完成CodeReview后才能进入下一评审环节。 + +1. API评审申请、代码提交(Owner:Contributor),所有涉及API新增或变更需同步提交相应的API评审文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、领域SIG、API SIG等相关人员预审。 +1. 代码评审(Owner:Committer),代码评审和API预审,涉及API提交Code Review通过后,还需要进一步领域SIG评审。如果单次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Committer评审,只有所有对应领域的Committer都完成CodeReview后才能进入下一评审环节。 1. API评审(Owner:领域SIG),新增API相关的代码提交评审,领域SIG评审通过即可代码合入;变更API相关的代码提交,领域SIG评审通过后,还需要进一步提交API SIG。如果单次提交同时涉及多个领域的API新增,相应的API评审申请和代码需要同时提交给相关领域的SIG评审,只需一个领域SIG评审通过即可代码合入。如果单次提交同时涉及多个领域的API变更,相应的API评审申请和代码需要同时提交给相关领域的SIG评审,只有所有对应领域的SIG都要评审通过才能进入下一评审环节。 1. API变更评审(Owner:API SIG),变更API相关的代码提交评审,评审通过即可代码。 1. 评审完成。 ### API评审申请要素 -如果涉及API新增或变更需同步提交相应的API设计文档。 + +如果涉及API新增或变更需同步提交相应的API评审文档。API评审文档使用[《OpenHarmony API 评审模板》](API-Review-Template.md)描述。 针对新增API,需要包含如下要素: 1. 需求来源与使用场景(必须)。 @@ -67,6 +88,8 @@ API评审流程如下: 3. 刷新ChangeLog(必须) 和 API-diff文档(涉及JS/Native API变更,必须)。 ## API设计要求 + + ### 一致性要求 1. 概念一致性:基于场景的业务模型抽象,形成OpenHarmony的连贯、一致、自恰的用户程序模型和业务概念。 1. 术语一致性:相应的业务术语必须采用统一名词,不允许使用多个语意接近的名词表示同一个业务对象;同样地,为了避免产生混淆,也不允许针对不同的业务对象使用相同的名词或语言接近的名词。 @@ -150,14 +173,33 @@ API评审流程如下: 1. 提供可替代接口。 1. 废弃API至少保留5个API Version版本(对废弃5个API Version的API可以彻底删除,不再支持)。 -### 性能/功耗/可靠性要求 +### 性能要求 1. 应及时响应,避免调用者等待;如果API调用执行时间过长应设计为异步方式。 -1. 应关注API调用时机、调用频次对RAM占用的影响。 -1. 应关注API调用时机、调用频次对功耗的影响。 -1. API内部创建对象的生命周期要闭合,避免对象资源泄漏。 -1. 满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。 +2. 应关注API调用时机、调用频次对RAM占用的影响。 +3. 应关注API调用时机、调用频次对功耗的影响。 +4. 对使用资源的API调用需要能及时释放资源,异常场景具备容错机制,保障资源及时释放。 + +### 功耗要求 + +1. 针对API调用时机、调用频次对功耗的影响做评估,有影响进行相关设计。 +2. 版本演进过程中,功耗不劣化。 + +### 可靠性要求 + +1. API不能因为外部输入(输入参数、系统状态、外部数据等)或者内部状态、数据异常而崩溃,应该返回确定的错误码或者抛出预定义的异常。 +2. API应明确调用是同步还是异步调用,若是同步调用,应明确超时上限或者允许调用者设置超时时间,避免调用卡死导致业务无响应。 +3. API务必支持多线程重入。 +4. 满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。 +5. API内部创建对象的生命周期要闭合,避免对象资源泄漏。 +6. API要明确客户端调用失败后,能够发起重试的最大次数。 ### 测试要求 1. 新增API必须同步交付API自动化测试用例,用例100%覆盖API接口。 -1. 用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。 -1. 用例执行高效,每条用例执行时间控制在毫秒级。 \ No newline at end of file +2. 用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。 +3. 用例执行高效,每条用例执行时间控制在毫秒级。 +4. 用例执行全自动化:接口用例需要达成100%自动化。 +5. 用例有效性:用户要求必须存在断言,且不能仅是检查是否抛出异常,需要有功能逻辑的断言。 + +### 编程语言要求 + +API根据其编程语言类型,需要遵守相应的OpenHarmony编程语言规范。 diff --git a/zh-cn/design/figures/API-Category.png b/zh-cn/design/figures/API-Category.png new file mode 100644 index 0000000000000000000000000000000000000000..22813ba83cd97c5017cb79b468bdcc416886022a Binary files /dev/null and b/zh-cn/design/figures/API-Category.png differ diff --git a/zh-cn/design/figures/API-Definition.png b/zh-cn/design/figures/API-Definition.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0d58d643151c779ee6ef4e05e2d00794a499fb Binary files /dev/null and b/zh-cn/design/figures/API-Definition.png differ diff --git a/zh-cn/design/figures/API-Workflow.png b/zh-cn/design/figures/API-Workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..e65960d8bdbcb19b4f4cda4dce16a71ce229c227 Binary files /dev/null and b/zh-cn/design/figures/API-Workflow.png differ