Questions tagged «api»

应用程序编程接口(API)是要供其他软件使用的软件的规范。

5
什么时候将API视为嵌入式DSL?
API和嵌入式领域特定语言(DSL)有什么区别? 只是语法吗? 考虑像OpenGL这样的API。与图形DSL有何不同? 换句话说,如果API足够复杂,是否可以将其视为嵌入式DSL?
10 api  dsl 

3
API对象定义包含第三方引用ID作为属性是否不好?
像这样: Campaign: type: object properties: id: type: string description: "A GUID identifier" referenceId: type: string description: "A consumers identifier they have used to map their own systems logic to this object." name: type: string description: "'Great Campaign 2017' as an example" 我担心referenceId。 系统域是一个平台,该平台通过数据导出和各种格式(xml,excel)的导入以多种方式与第三方集成。它已经足够成熟,可以允许第三方通过API与我们的系统集成,而该API的设计正是引发这一问题的原因。 我们有一个名为Campaign的对象,该对象的ID可用于识别和检索资源。我们API的消费者可能在自己的域内拥有自己的参考代码,以作为他们认为是广告系列的参考代码。 我们系统中还有其他带有第三方参考字段的对象,这是我们现有消费者所期望的。但是我担心这给我们增加了映射的负担,我们不知道这个referenceId是什么(数字,文本,json?),并且为新使用者增加了另一个令人困惑的属性。 在API的公共对象定义中允许第三方引用ID字段被视为不良做法或不良设计?

2
增加一组有限的选项;API重大变化?
以一个HTTP API端点为例,它发出以下响应模型: { "type": "Dog", "name": "Jessi", ... } 该type领域已经在文档中被描述为一个Dog,Cat或Fish。 例如Rat,是否将添加新选项视为API的重大更改? 将选项添加到有限列表(开发人员可以打开该列表)是否被视为对API的扩展或修改?
9 rest  api  api-design  json 

3
用REST的话来说,资源和表示之间有什么区别?
我对REST的理解使得可以将服务操作建模为状态的表示,并使用HTTP从一种状态转换为另一种状态。直到最近,当我阅读Jimmy Bogard的这篇文章时,我一直将资源理解为服务端状态的代表,我知道他是一个受到社区尊重的聪明的开发人员/架构师。引用该帖子的特定声明 表示形式有所不同–它描述了资源的当前状态(在请求时)。 这让我感到困惑。关于该主题的普遍看法是什么?
9 rest  api  api-design 

2
REST API中的警告不是严重错误
我有一个REST API,对于某些企业(例如DELETE,POST或PUT),我有一些验证规则可以返回错误。 现在,我需要一种新的错误类型,例如非严重错误,它应该以正常方式失败,但是如果发送了“禁止警告”标志,则应该执行该操作。可以问这样的用户:“您确定要更改此状态,您尚未完成” 问题:是否存在针对此类错误的最佳实践? 次要问题: 我可以使用这种行为的任何HTTP语义吗? 我仍然遵循REST的想法吗(对我来说,我看起来确实如此)-我保持它为无状态
9 rest  api 

3
CRUD API:如何指定要更新的字段?
假设您有某种数据结构,该数据结构保留在某种数据库中。为简单起见,我们将此数据结构称为Person。现在,您要负责设计CRUD API,该API允许其他应用程序创建,读取,更新和删除Person。为简单起见,让我们假定通过某种Web服务访问此API。 对于CRUD的C,R和D部分,设计很简单。我将使用类似C#的功能符号-实现可以是SOAP,REST / JSON或其他方式: class Person { string Name; DateTime? DateOfBirth; ... } Identifier CreatePerson(Person); Person GetPerson(Identifier); void DeletePerson(Identifier); 那更新呢?自然要做的是 void UpdatePerson(Identifier, Person); 但你会如何指定哪些领域Person要更新? 我可以提出的解决方案: 您始终可以要求通过一个完整的“人员”,即客户将执行以下操作来更新出生日期: p = GetPerson(id); p.DateOfBirth = ...; UpdatePerson(id, p); 但是,这将需要某种事务上的一致性或在Get和Update之间锁定;否则,您可能会覆盖其他客户端并行进行的其他更改。这会使API更加复杂。此外,由于下面的伪代码(假设客户端语言支持JSON),因此容易出错。 UpdatePerson(id, { "DateOfBirth": "2015-01-01" }); - 看起来正确-不仅会更改DateOfBirth,而且会将所有其他字段重置为null。 您可以忽略所有的字段null。但是,您将如何在不更改 DateOfBirth和有意将其更改为null之间做出区别? 将签名更改为void UpdatePerson(Identifier, Person, ListOfFieldNamesToUpdate)。 将签名更改为void …

3
正在使用具有可接受的副作用(REST)的PUT
每当用户更新表单时,我都想创建一个撤消历史记录。因为这是更新,所以我想使用PUT请求。但是,我读到PUT不需要有副作用。 在这里使用PUT是否可以接受?有更好的选择吗? PUT /person/F02E395A235 { time: 1234567, fields: { name: 'John', age: '41' } } 在服务器中 doPut('person/:personId', // create a new person snapshot ) 编辑: 用户可以看到该历史记录,多次调用将产生多个版本。 解决方案是在创建版本之前检查该版本是否唯一。
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.