伴随各大移动应用厂商推出各自的小程序应用解决方案,小程序开发者也面临需要兼容多个平台的棘手问题。如何做到 Write once,run everywhere?Rax、uniapp、Taro、Remax 等跨端框架给出了“一套代码多端运行”的解决方案,但是在实际的业务开发过程中,API 层面却没有一个跨端的标准和解决方案,导致跨端业务分支众多、代码繁琐等问题。
在阿里,先后经历了 Hybrid、Native 融合、动态模板、小程序、Web 渐进渲染等一系列发展之后, 各业务的跨端需求越来越频繁,面对多样的业务场景和快速的技术迭代, 业务开发同学的精力大量集中在跨端的多套代码开发或兼容适配上,无法将精力集中投入在业务中,API 更是其中尤为费精力的一环。
还记得前段时间大火的社区团购,多个小程序投放的复杂场景出现,且时间紧任务重,一码多端成为刚需。阿里数字农业团队在经历了盒马集市的业务洗礼后,Uni API 的雏形在业务中孕育而生,之后多方共同参与,诞生出了 Uni API。它解决了小程序之间以及 Web 的 API 差异,为你实现小程序以及 Web 的一码多端提供坚实基础。
Uni API 是一个 API 层面的一码多端方案,它有以下特性:
支持 Web、微信小程序、头条小程序、阿里小程序、百度小程序、快手小程序
无框架依赖
提供双语文档、丰富样例
覆盖 101 个 API 实现
支持按需加载,按环境剔除无用代码
提供完善的 TypeScript 声明,让你可以摆脱文档,沉浸编程
小程序容器 API 现状:
我们对目前市面上三大主要容器的 API 进行了统计,数据来源为各个容器的官方文档,统计如下:
其中,微信的 API 最多,我们在三者中取三方都有实现的 API 作为通用 API,结果为101 个,后续跟随各个文档的升级可能还会增大。我们发现,这 101 个 API 中,有超过一半的 API 在不同容器间有差异,并且,有 70% 左右的 API 在 web 上依然可以支持。
(字节小程序和快手小程序由于起步晚,API 较少,对比文档后,大体基于微信规范,可以认为同样适用这个 101 个通用 API)
我们再对这 101 个 API 进行拆解:
Uni API 将重点实现这 101 个通用 API,并解决以下问题:
不同小程序容器 tt 、wx 等前缀,API 调用方式不统一。
不同小程序容器 API 入参出参规范有差异。
原生 API 缺乏 Ts 声明,不能自动联想,编写体验差
做跨端应用时,需要翻看多个平台的文档,并且在代码中兼容差异
做跨端应用时,编写兼容代码,会导致无用代码过多,无法剔除
做跨端应用时,缺乏 Web 实现,无法在浏览器端正常调试
Uni API 以微信小程序 API 规范为基础,并遵循通用原则,对一些不通用的地方进行修改,得出一套完整的 API 规范。
我们将 API 划分为4种
各个小程序容器之间没有差异的 API(即入参出参一致,功能实现一致)
各个小程序容器之间有差异但可以无感知抹平的 API(即功能实现一致,但入参出参或者命名有差异)
各个小程序容器之间有差异且无法抹平的 API(即功能实现不一致)
有的小程序实现有的小程序没有实现的 API(即容器上的特色 API)
Uni API 对各类 API 的处理:
对第一种,API 之间并没有什么差异,所以 Uni API 对这种 API 做了去前缀或者 Promise 化处理。
对第二种,Uni API 根据规范抹平了入参出参的不一致。
对第三种,由于能力有缺失,Uni API 在规范中透出各个容器的能力子集,但保留各个容器不一致的能力。
对第四种,Uni API 通用 API 中暂不支持
根据 API 分类规则,我们对 API 入参做了统一,并对差异性入参提供_ext 参数进行处理,如:showActionSheet 入参 itemColor 在微信小程序上支持,在阿里小程序上不支持,title 参数在阿里小程序支持,在微信不支持,那么,你可以这样写:
import showActionSheet from '@uni/action-sheet';
showActionSheet({
itemList: ['A', 'B', 'C'],
_ext: {
aliMiniApp: {
title: '我是额外参数标题_ext.aliMiniApp',
},
wechatMiniProgram: {
itemColor: '#ff1214',
},
},
}).then((res) => {
console.log(`选中项Index:${res.tapIndex}`);
});
如上,itemColor 将只会在微信小程序容器时被接收,同样的 title 参数也只会在阿里小程序容器时被接收。
我们会统一不同容器 API 的出参,对有差异的出参抹平能力上的子集,同时保留其它不在规范里的出参,留给业务自行使用。
Uni API 帮你识别环境差异, 帮你做好不同容器的兼容,因此你可以把精力更好的投入到业务实现中。
Uni API 不依赖任何框架及 DSL(可以在任何小程序原生项目或跨端框架项目中无差别使用),Web 端完全原生 Dom 操作,无框架依赖,UI 对齐规范
Uni API 对 API 按功能关联性做了聚类,将几个关联性强的 API 放在一起,你可以不需要一个一个引用,
Uni API 对异步 API 做了 Promise 改造,更方便业务维护自己的代码
完善的 Typescript 声明,结合 Typescript 的代码自动提升,可以给予你超过原生的编程体验。
对 API 错误做了统一处理,更方便业务处理异常。
Uni API 规划提供 100+ API,一期实现 70+,覆盖80%以上应用场景。
超大的 API 覆盖,超小的代码体积,Uni API 在实现层面就把体积问题作为重点考虑,并重新设计了工程,因此,当你使用 Uni API 时,最终的代码产物,就像你自己直接调用原生一样,完全不会有多余代码。
Uni API 官网以及 Rax 官网提供详尽的中英文版 API 调用文档,文档粒度细致到每个 API 每个参数的用法及其支持度,绝大部分情况下,用户可以舍弃各平台的文档,仅参考 Uni API 官方文档即可满足开发需求。
为方便一码多端的需要,文档里针对不通用能力(无法抹平的能力)进行了标记警告。
Uni API 为支持的各端都提供了完善的 API 使用示例和体验 Demo,可直接扫码在真机上体验所有支持的 API
小程序码:
3、完善的 Typescript 声明
Uni API 为每个 API 提供了详尽的 Typescript 声明,结合编辑器触发代码的自动提示,这将给你带来原生无法提供的编程体验,甚至可以离开文档,直接编程,Typescript 的自动校验,可以让你的 API 代码更加规范,提前避免手误粗心之类的错误。
Uni API 提供了canIUse 支持度检测工具
import canIUse from '@uni/caniuse';
canIUse('clipboard');// true
canIUse('clipboard.getClipboard');// true
Uni API 提供两种模式引用:
npm install --save @uni/storage
import { getStorageSync } from '@uni/storage';
getStorageSync({key: 'key'});
npm install --save @uni/apis
import {
application,
env,
unitTool,
canvas,
accelerometer,
clipboard,
systemInfo,
file,
actionSheet,
alert,
toast,
loading,
element,
intersectionObserver,
confirm,
location,
image,
navigate,
request,
storage } from '@uni/apis';
confirm({content: '显示模态框'});
storage.getStorageSync({key: 'key'});
Uni API 内部基于原子化 API 实现,因此可以支持分环境,分 API 引入,达到极致体积。
我们提供了 babel 插件帮助使用方剔除 Uni API 的无用代码,你可以这样用:
npm i @uni/babel-plugin-universal-api-import
在 babel 配置中加入插件:
[
'babel-plugin-universal-api-import',
{
target: 'miniapp'
}
]
我们还专门为 Rax 用户提供了插件,你可以这样使用:
npm i @uni/build-plugin-rax-api-import
在 build.json 文件中加入插件:
"plugins" : [
[
"build-plugin-rax-api-import"
]
]
Uni API 对 API 进行原子维度开发,从 API ,容器两个维度进行模块编写,截止目前 65 个 API 叠加 6 个容器维度,共有 390 个 API 实现,同时保证每个模块的功能独立,调用方式一致,因此可以实现业务中原子化引用,达到极致体积,并且可以被其它库依赖。
未来 101 个 API 叠加 6 个容器维度,将达到惊人的 606 个 模块实现、50+ package。
Uni API 旨在解决各大小程序厂商之间、以及小程序与 Web 之间 API 在实现和规范上无法对齐的问题,解决 Api 层面的一码多端。未来会支持更多的容器和更广泛的API,提供轻量便捷的解决方案,在满足业务需求的同时,追求极致的代码体积和最优的体验。
希望有了 Uni API,开发者可以离真正完美的一码多端更近一步。
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/PKtwTCmR19rYaMALWAS0uw
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。