Questions tagged «api-design»

API设计是确定和公开一组一致的方法签名,返回值以及旨在供其他开发人员用来允许以编程方式访问数据的文档的过程。


7
REST嵌套资源的最佳做法是什么?
据我所知,每个单独的资源应该只有一条规范路径。因此,在以下示例中,好的URL模式将是什么? 以公司的其余代表为例。在此假设示例中,每个公司拥有 0个或多个部门,每个部门拥有 0个或多个员工。 没有关联公司就不可能存在部门。 没有相关部门,员工就不会存在。 现在,我将找到资源模式的自然表示形式。 /companies 公司集合 -接受为新公司投入的资金。获取整个收藏集。 /companies/{companyId}一家个人公司。接受GET,PUT和DELETE /companies/{companyId}/departments接受新项目的POST。(在公司内创建部门。) /companies/{companyId}/departments/{departmentId}/ /companies/{companyId}/departments/{departmentId}/employees /companies/{companyId}/departments/{departmentId}/employees/{empId} 在每个部分都有这些限制的情况下,我觉得如果嵌套得很深,这是有意义的。 但是,如果要列出(GET)所有公司的所有员工,就会遇到困难。 资源模式将最紧密地映射到/employees(所有员工的集合) 这是否意味着我/employees/{empId}也应该拥有,因为如果是这样,那么有两个URI可以获取相同的资源? 或可能应该将整个架构展平,但这意味着员工是嵌套的顶级对象。 从根本/employees/?company={companyId}&department={deptId}上讲,与最深层的嵌套模式一样,返回的员工视图完全相同。 URL模式的最佳实践是什么,其中资源由其他资源拥有,但应该可单独查询?
301 rest  api-design 

11
API分页最佳做法
我希望获得一些帮助,以我正在构建的分页API处理奇怪的边缘情况。 像许多API一样,这一分页会产生很大的结果。如果查询/ foos,将得到100个结果(即foo#1-100),以及指向/ foos?page = 2的链接,该链接应返回foo#101-200。 不幸的是,如果在API使用方进行下一个查询之前从数据集中删除foo#10,则/ foos?page = 2将偏移100并返回foos#102-201。 对于尝试提取所有foo的API使用者来说,这是一个问题-他们将不会收到foo#101。 处理此问题的最佳做法是什么?我们希望使其尽可能轻巧(即避免处理API请求的会话)。其他API的示例将不胜感激!

5
为什么Java Streams一次性出现?
与C#不同IEnumerable,在C#中,执行管道可以执行任意多次,而在Java中,流只能“迭代”一次。 对终端操作的任何调用都会关闭流,使其无法使用。这种“功能”带走了很多力量。 我想这不是技术原因。这种奇怪的限制背后的设计考虑是什么? 编辑:为了演示我在说什么,请考虑以下C#中的Quick-Sort实现: IEnumerable<int> QuickSort(IEnumerable<int> ints) { if (!ints.Any()) { return Enumerable.Empty<int>(); } int pivot = ints.First(); IEnumerable<int> lt = ints.Where(i => i < pivot); IEnumerable<int> gt = ints.Where(i => i > pivot); return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt)); } 现在确定,我不主张这是快速排序的良好实现!但是,这是将lambda表达与流操作相结合的表达能力的一个很好的例子。 而且用Java无法做到!我什至不能问一个流是否为空而不使它无法使用。

8
以RESTful方式在资源上调用服务器端方法
请记住,我对REST有基本的了解。假设我有以下网址: http://api.animals.com/v1/dogs/1/ 现在,我想让服务器将狗叫起来。只有服务器知道如何执行此操作。假设我想让它在CRON作业上运行,该作业会使狗在以后的永恒中每10分钟吠叫一次。这个电话看起来像什么?我有点想这样做: 网址请求: ACTION http://api.animals.com/v1/dogs/1/ 在请求正文中: {"action":"bark"} 在为构造自己的HTTP方法而生我的气之前,请帮助我,让我更好地了解如何以RESTful方式调用服务器端方法。:) 编辑澄清 有关“树皮”方法功能的更多说明。以下是一些可能导致结构不同的API调用的选项: 树皮只会向dog.email发送电子邮件,却什么也没记录。 bark将电子邮件发送到dog.email,并将dog.barkCount递增1。 树皮会在树皮发生时使用bark.timestamp记录创建一个新的“树皮”记录。它还会将dog.barkCount递增1。 吠声运行系统命令以从Github中获取最新版本的狗码。然后,它将一条文本消息发送到dog.owner,告诉他们新的狗代码正在生产中。

7
何时在RESTful API中使用路径参数与查询参数?
我想使我的RESTful API非常可预测。确定何时使用URI而不是使用查询参数对数据进行分段的最佳实践是什么? 对我来说,支持分页,排序和分组的系统参数应该位于“?”之后 但是,诸如“状态”和“区域”之类的字段或对您的收藏进行细分的其他属性呢?如果这些也要用作查询参数,那么知道何时使用路径参数的经验法则是什么?

4
为什么String.valueOf(null)抛出NullPointerException?
根据文档,该方法String.valueOf(Object obj)返回: 如果参数是null,则字符串等于"null"; 否则,obj.toString()返回的值。 但是,当我尝试这样做时,怎么会这样: System.out.println("String.valueOf(null) = " + String.valueOf(null)); 它会抛出NPE吗?(如果您不相信,请自己尝试!) 线程“主”中的异常java.lang.NullPointerException 在java.lang.String。(未知来源) 在java.lang.String.valueOf(未知来源) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗?


28
英国英语还是美国英语?
如果您有API,并且您是英国的开发人员且具有很高的国际受众,那么您的API应该是 setColour() 要么 setColor() (以一个字为例)。 英国工程师通常对自己的“正确”拼写颇为防御,但可以说美国拼写在国际市场上更为“标准”。 我想问题是重要的吗?其他地区的开发人员是否在拼写GB拼写方面挣扎,还是通常很清楚这是什么意思? 都是美国英语吗?

3
令牌已过期-JSON REST API-错误代码
我有一个JSON REST API。握手会给您一个有效期为15分钟的令牌。您在这15分钟内拨打的所有电话都可以正常运行。15分钟后,我返回一个错误对象(包括代码,消息,成功= false),但我也想知道应该返回什么HTTP错误代码?并且使用HTTP错误代码会使某些客户端混乱吗?(HTML5,iPhone,Android)。在这种情况下,什么是最佳实践?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.