API设计中时间定义的5条规则
API设计中,如何定义你的时间参数和时间相关的返回值可能会是一个潜在的问题,千万不要低估这些问题,它们可能会对你未来的设计和实现造成很大麻烦。
本文提供一些tips可能可以帮助到大家
规则#1 使用ISO-8601作为时间格式
- 使用ISO-8601应该没有太大疑问,毕竟W3C/IETF/XKCD都在使用这个标准。ISO-8601可能完美的支持显示日期、时间以及时区
- ISO-8601有很多优点,包括:
- 自然排序 :天生支持自然排序,无需其他转换工作
- 时区支持:用户的地时区对开发者来说都是必须要考虑的因素,而ISO-8601可以很好的描述时区偏移
- 位置无关:假定给一个日期2/3/4, 这个日期如果你在美国,可能表示时间为Feb 3, 2004,在其他地方,可能表示Mar 2,2004 ,而在ISO 8601的定义中,2004-02-03不会带来任何歧义
- 语言支持:绝大部分的语言都有成熟的库来支持ISO-8601
可以通过LINUX/UNIX控制台快速的看下ISO-8601的格式
规则#2 支持任何时区
在全球化的时代,如果我们的API对外开放,就不能对用户所在的时区做任何假设,而ISO-8601很好的支持了时区的偏移量描述
规则#3 用UTC格式存储时间
很多系统都会使用公司总部所在的时区,而这对于处在地球另一端的用户是比较糟糕的体验
UTC(世界协调时间),是最常见的通用时间存储格式,因为它不代表任何时区,这使得开发者可以基于用户所在的时区方便的进行转换
规则#4 使用UTC时间作为返回时间格式
对于用户不同时区数据的需求,你不需要太多理会,只要告诉你的用户:"你获取的是UTC格式的时间"
规则#5 如果你只需要日期而不是时间的话,不要使用时间
ISO 8601允许我们提供一个日期而不是时间。加入我们有个场景,只需要提供一个日期 2013-03-01, 假设我们用UTC时间2013-03-01T23:59:59来表达,那么,对于中国标准时间(UTC+0800)做时差计算,时间就会是Mar 2,2013 8AM,这可能会带来一些问题。我们可以简单的使用不带任何时间/时区偏移的2013-03-01来描述,这可以避免日期解析带来的误读。当前,大多数存储系统都支持只包含日期的格式
总结
上面提到的一些格式我们放心使用,因为几乎所有的Restful平台都在使用这些格式,不过需要注意的是,作为API提供者,我们需要关心当数据离开我们的平台,用户会基于这些数据做些什么
另外,我们开发的很多应用面向的可能是不同国家和时区的用户,如果你不想针对时间和日期写一大堆转换的代码,那么你需要好好利用这些规则
原文:The 5 laws of API dates and times
原文下面有些回复也很有意思,有兴趣的同学可以看下~
API设计中时间定义的5条规则相关推荐
- 让你在 API 设计中少踩坑的实战分享
本文来自作者 奔跑吧架构师 在 GitChat 上分享 「让你在 API 设计中少踩坑的实战分享」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 在项目开发中,实际的编码只占用了整个项目不 ...
- API设计中性能提升的10个建议
[引子]节前的时候, 一好友约我聊一聊API 的设计.当时觉得仿佛有万语千言,但我又难以脱口而出1.2.3.原来,即便是工作的日常,也缺乏一个系统性的思考和整理.API的设计涉及到的方面很多, 分类是 ...
- ui设计颜色的使用_UI设计中颜色使用的10条原则
ui设计颜色的使用 重点 (Top highlight) 1.颜色术语 (1. Color Terminology) Color terminology forms our foundation of ...
- 带时间轴 歌词 示例_Web设计中时间轴的20个精彩示例
我可以肯定你们中的大多数人都知道设计中使用了时间轴,特别是因为现在所有的Facebook个人资料都是以这种方式显示的 . 此外,一些智能手机应用(例如Path或Tweetbot)也使用基于时间轴的设计 ...
- sql 查数据库中时间最新的一条记录
下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by ...
- API设计中防重放攻击
HTTPS数据加密是否可以防止重放攻击? 否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击. 防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重放攻击是什么呢?就是把你 ...
- DeepL Api 设计中的欺骗战术
安全不仅仅是一门朴素的学问,更是一门权衡的艺术.有时一个简单的设计可以规避掉大多数攻击问题,下面分享一篇在网上看到的DeepL API的反爬设计. 这篇博文本应该在去年完成 DeepL 客户端逆向的时 ...
- 阿里研究员谷朴:API 设计最佳实践的思考
2019独角兽企业重金招聘Python工程师标准>>> API是软件系统的核心,而软件系统的复杂度Complexity是大规模软件系统能否成功最重要的因素.但复杂度Complexit ...
- 深度 | API 设计最佳实践的思考
API 是模块或者子系统之间交互的接口定义.好的系统架构离不开好的 API 设计,而一个设计不够完善的 API 则注定会导致系统的后续发展和维护非常困难. 接下来,阿里巴巴研究员谷朴将给出建议,什么样 ...
最新文章
- 基于MATLAB的面向对象编程(1)——类,属性,方法
- 静态资源跨域解决方案
- 特征阻抗输入阻抗输出阻抗_软件阻抗说明
- 题解 AT5308 【[ABC156B] Digits】
- 蓝牙学习笔记(一)——蓝牙相关概念和术语整理(小白版)
- BULK INSERT, 实战手记:让百万级数据瞬间导入SQL Server
- 自动驾驶 5-1 比例积分微分 (PID) 控制Lesson 1: Proportional-Integral-Derivative (PID) Control
- 微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io
- Vuforia SDK导入问题Vuforia.UnityExtensions Consider removing one of the references or sign the assembl
- 关于食堂排队与座位问题的调查报告
- select后面的子查询
- 卸载landesk的方法
- Android 简单音乐播放器开发
- css gray rgb数值,CSS3 调色板 颜色值对照表
- 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。
- 通过树结构的演变以及实现来辩证的看数据结构
- Java之第一行代码
- Eclipse配置使用Git
- 身高体重和标准身高的比较
- BetterZip Mac版教程——如何取消关联文件?
热门文章
- 别错过!监理工程师报名流程!
- 论文记录:Decoupling GCN with DropGraph Module for Skeleton-Based Action Recognition
- 万兴软件公司总裁吴太兵:软件出口——中国通用软件产业的春天
- 【仿真】Carla之Docker 运行 及 渲染相关 [6]
- 关于人工智能AI技术
- FreeSWITCH 挂机hook处理通用处理方案
- linux下脚本文件运行不了,linux执行sh脚本游戏蜂窝运行没反应
- 青少年软件编程C++一级题库(1-10)
- queue的简单应用——报数游戏
- Jquery(八)插播:jQuery实施方案