Questions tagged «api»

请勿使用:标记您要使用的库,[api-design]或其他合适的方法。要求我们推荐或找到API的问题是题外话。


27
让二传手返回“ this”是否是错误的做法?
使Java中的setter返回“ this”是好是坏的主意? public Employee setName(String name){ this.name = name; return this; } 这种模式很有用,因为这样您就可以像这样链接设置器: list.add(new Employee().setName("Jack Sparrow").setId(1).setFoo("bacon!")); 代替这个: Employee e = new Employee(); e.setName("Jack Sparrow"); ...and so on... list.add(e); ...但是有点违反标准惯例。我想这可能是值得的,因为它可以使设置者做其他有用的事情。我已经看到此模式在某些地方使用过(例如JMock,JPA),但这似乎并不常见,并且仅用于定义非常明确的API,该模式随处可见。 更新: 我所描述的内容显然是有效的,但是我真正要寻找的是一些关于是否可以普遍接受以及是否存在陷阱或相关最佳实践的想法。我知道Builder模式,但是它比我描述的要复杂得多-正如Josh Bloch所描述的那样,有一个关联的静态Builder类用于对象创建。
249 java  design-patterns  api  oop 

15
有关.NET中API突破性更改的权威指南
我想收集有关.NET / CLR中API版本的尽可能多的信息,尤其是API更改如何破坏客户端应用程序。首先,让我们定义一些术语: API更改 -类型的公开可见定义的更改,包括其任何公共成员。这包括更改类型和成员名称,更改类型的基本类型,从类型的已实现接口列表中添加/删除接口,添加/删除成员(包括重载),更改成员可见性,重命名方法和类型参数,添加默认值对于方法参数,在类型和成员上添加/删除属性,以及在类型和成员上添加/删除通用类型参数(我错过了什么吗?)。这不包括成员机构的任何更改,也不包括对私人成员的任何更改(即,我们不考虑反思)。 二进制级中断 -一种API更改,导致针对旧版本API编译的客户端程序集可能不会随新版本一起加载。示例:更改方法签名,即使允许以与以前相同的方式调用它(即:void会返回类型/参数默认值重载)。 源代码级中断 -API更改,导致编写的现有代码无法针对旧版本的API进行编译,因此可能无法与新版本一起编译。但是,已编译的客户端程序集仍可以像以前一样工作。示例:添加一个新的重载,这可能导致先前明确的方法调用中的歧义。 源代码级别的静默语义更改 -API更改会导致编写的现有代码可以针对较旧版本的API进行编译,从而通过例如调用其他方法静默更改其语义。但是,该代码应继续编译而不会出现警告/错误,并且以前编译的程序集应像以前一样工作。示例:在现有类上实现新接口,导致在重载解析期间选择了不同的重载。 最终目标是对尽可能多的破坏性的和安静的语义API更改进行分类,并描述破坏的确切效果,以及受破坏影响的语言和不受破坏的语言。进一步扩展后者:尽管某些更改会普遍影响所有语言(例如,向接口添加新成员将破坏该接口在任何语言下的实现),但有些更改需要非常特定的语言语义才能发挥作用。这通常涉及方法重载,并且通常涉及隐式类型转换。即使对于符合CLS的语言(即那些至少符合CLI规范中定义的“ CLS使用者”规则的语言),似乎也没有任何方法可以定义“最小公分母”。如果有人在这里纠正我的错误,我将不胜感激-因此,这将不得不逐语言进行。自然而然,最有趣的是.NET随附的那些:C#,VB和F#。但是其他的也相关,例如IronPython,IronRuby,Delphi Prism等。极端情况越多,就会越有趣-删除成员之类的事情是不言而喻的,但是方法重载,可选/默认参数,lambda类型推断和转换运算符之间的微妙交互可能会令人惊讶有时。 几个例子来启动这个: 添加新方法重载 种类:源代码级中断 受影响的语言:C#,VB,F# 更改前的API: public class Foo { public void Bar(IEnumerable x); } 更改后的API: public class Foo { public void Bar(IEnumerable x); public void Bar(ICloneable x); } 样例客户端代码在更改前起作用,在更改后中断: new Foo().Bar(new int[0]); 添加新的隐式转换运算符重载 种类:源代码级中断。 受影响的语言:C#,VB 不受影响的语言:F# …

11
宁静的API服务
我正在寻找一种可以用来调用基于Web的REST API的服务。 基本上,我想在应用程序init上启动服务,然后我希望能够要求该服务请求url并返回结果。同时,我希望能够显示进度窗口或类似的窗口。 我已经创建了一个当前使用IDL的服务,我读过某个地方,您实际上只需要此即可进行跨应用程序通信,因此认为这些需求已经剥离,但是不确定如果没有它,如何进行回调。另外,当我按下该post(Config.getURL("login"), values)应用程序时,该应用程序似乎暂停了一段时间(似乎很奇怪-认为服务背后的想法是它在不同的线程上运行!) 目前,我有一个内部带有post和get http方法的服务,几个AIDL文件(用于双向通信),一个处理服务的启动,停止,绑定等的ServiceManager,并且正在动态创建带有特定代码的Handler。根据需要进行回调。 我不想让任何人给我一个完整的代码库,但是有些指针将不胜感激。 代码(大部分)完整: public class RestfulAPIService extends Service { final RemoteCallbackList<IRemoteServiceCallback> mCallbacks = new RemoteCallbackList<IRemoteServiceCallback>(); public void onStart(Intent intent, int startId) { super.onStart(intent, startId); } public IBinder onBind(Intent intent) { return binder; } public void onCreate() { super.onCreate(); } public void onDestroy() { super.onDestroy(); …

4
使用python向RESTful API发出请求
我有一个RESTful API,我已经在EC2实例上使用Elasticsearch的实现公开了索引内容的语料库。我可以通过从终端机(MacOSX)运行以下命令来查询搜索: curl -XGET 'http://ES_search_demo.com/document/record/_search?pretty=true' -d '{ "query": { "bool": { "must": [ { "text": { "record.document": "SOME_JOURNAL" } }, { "text": { "record.articleTitle": "farmers" } } ], "must_not": [], "should": [] } }, "from": 0, "size": 50, "sort": [], "facets": {} }' 如何使用python/requests或python/urllib2(不确定要使用哪一个-一直在使用urllib2,但听说请求更好……)将以上转换为API请求?我是否可以通过标题?

10
REST API是否有任何命名约定准则?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 2年前关闭。 改善这个问题 创建REST API时,API中是否有任何有关命名约定的准则或事实上的标准(例如:URL端点路径组件,querystring参数)?骆驼帽是规范,还是下划线?其他? 例如: api.service.com/helloWorld/userId/x 要么 api.service.com/hello_world/user_id/x 注意:这不是RESTful API设计的问题,而是用于最终使用的路径组件和/或查询字符串参数的命名约定准则。 任何准则,将不胜感激。

9
API与Web服务[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 Web服务和API有什么区别?区别是否超过用于传输数据的协议?谢谢。

13
如何在不使用Firebase控制台的情况下发送Firebase Cloud Messaging通知?
我将从通知的新Google服务开始Firebase Cloud Messaging。 多亏了这段代码https://github.com/firebase/quickstart-android/tree/master/messaging,我能够从Firebase用户控制台发送通知发送到Android设备。 是否有任何API或方法无需使用Firebase控制台即可发送通知?我的意思是,例如,一个PHP API或类似的东西,可以直接从我自己的服务器创建通知。

9
API和ABI之间的区别
我是Linux系统编程的新手,在阅读Linux系统编程时遇到了API和ABI 。 API的定义: API定义了接口,软件可以通过这些接口与源级别的另一软件进行通信。 ABI的定义: API定义了源接口,而ABI定义了特定体系结构上两个或多个软件之间的低级二进制接口。它定义了应用程序如何与自身交互,应用程序与内核交互以及应用程序与库交互。 程序如何在源代码级别进行通信?什么是源代码级别?无论如何,它与源代码有关吗?还是库的源包含在主程序中? 我知道的唯一区别是API主要由程序员使用,而ABI主要由编译器使用。
192 api  abi 

5
为移动应用程序创建API-身份验证和授权
总览 我正在为我的应用程序创建一个(REST)API。最初/主要目的是供移动应用程序(iPhone,Android,Symbian等)使用。我一直在研究基于Web的API的身份验证和授权的不同机制(通过研究其他实现)。我已经把大部分基本概念都束之高阁,但仍在一些方面寻求指导。我想做的最后一件事是重新发明轮子,但是我没有找到任何适合我标准的标准解决方案(但是我的标准可能会被误导,因此也随时可以批评我)。另外,我希望所有使用它的平台/应用程序的API都相同。 oAuth 我会继续反对oAuth,因为我知道这可能是第一个提供的解决方案。对于移动应用程序(或更确切地说是非Web应用程序),离开应用程序(转到Web浏览器)进行身份验证似乎是错误的。另外,浏览器无法(我知道)将回调返回给应用程序(尤其是跨平台)。我知道有几个应用程序可以做到这一点,但是感觉不对,并中断了应用程序UX。 要求 用户在应用程序中输入用户名/密码。 每个API调用均由调用应用程序标识。 开销降至最低,并且对于开发人员而言,auth方面很直观。 该机制对于最终用户(不公开其登录凭据)和开发人员(不公开其应用程序凭据)都是安全的。 如果可能,则不需要https(绝不是硬要求)。 我当前的实施思想 外部开发人员将请求一个API帐户。他们将获得一个apikey和apisecret。每个请求至少需要三个参数。 apikey-在注册时提供给开发人员 时间戳-兼用作给定apikey的每个消息的唯一标识符 hash-时间戳+ apisecret的哈希 需要apikey来标识发出请求的应用程序。时间戳记的行为与oauth_nonce类似,并且避免/减轻了重播攻击。哈希确保请求实际上是从给定apikey的所有者发出的。 对于经过身份验证的请求(代表用户的请求),我仍然不确定要使用access_token路由还是使用用户名和密码哈希组合。无论哪种方式,在某个时候都将需要用户名/密码组合。因此,当这样做时,将使用多个信息(apikey,apisecret,时间戳)和密码的哈希。 我希望在这方面提供反馈。 仅供参考,他们必须先对密码进行哈希处理,因为我不会在不进行哈希处理的情况下将密码存储在系统中。 结论 仅供参考,这并不是要求通常如何构建/结构化API,而仅仅是要求如何仅从应用程序内部处理身份验证和授权。 随机想法/奖金问题 对于仅要求将apikey作为请求的一部分的API,如何防止apikey所有者以外的其他人看到apikey(因为是明文发送的),并提出过多的请求以使它们超过使用限制?也许我只是在考虑这个问题,但是不应该有什么东西可以验证对apikey所有者进行了验证的请求吗?在我的情况下,这是apisecret的目的,它不会被散列而不会显示/传输。 说到哈希,md5 vs hmac-sha1呢?当所有值都用足够长的数据(即apisecret)进行哈希处理时,真的重要吗? 我以前一直在考虑向用户密码哈希添加每用户/行盐。如果要这样做,应用程序如何能够在不知道使用盐的情况下创建匹配的哈希?


10
API和SDK之间的区别
我试图向非开发人员说明API与SDK之间的区别。我需要解释一下为什么商业指纹软件供应商可能不会提供SDK,尽管他们肯定使用了SDK。 设备供应商和软件供应商都可以并且应该公开定义良好的API。该API允许其他软件程序(被写入)与供应商自己的软件组件或硬件设备进行互操作。 如果有人有更多的想法可以清楚地解释这一点,我将非常感谢这些建议。我想强调一下,目的是向不了解开发人员术语的非程序员解释这些概念。 具体来说,在指纹传感器与软件进行注册/验证的情况下,以下是我尝试解释的方法: 如果我是指纹设备/传感器制造商,而不是从事软件编写业务,那么我可以更好地销售产品的方式是: 确保我的设备驱动程序可安装在多种操作系统上 定义并提供API,供软件开发人员编写程序(例如,用于注册,验证)以“交谈”或使用我的设备 开发并提供SDK(比API先进一步),以使软件开发人员能够更轻松快捷地编写适用于我的设备的程序。SDK可能会提供帮助程序代码库,参考应用程序,文档等。
187 api  sdk 

5
REST API身份验证
我正在构建一个将托管在服务器上的应用程序。我想为该应用程序构建一个API,以促进与任何平台(Web App,Mobile App)的交互。我不了解的是,在使用REST API时,我们如何验证用户身份。 例如,当用户登录后想要创建论坛主题时。我怎么知道该用户已经登录?
181 api  rest 

3
REST API登录模式
我正在创建一个REST api,紧紧遵循apigee建议,使用名词而不是动词,url中烘焙的api版本,每个集合两个api路径,GET POST PUT DELETE用法等。 我正在使用登录系统,但是不确定用于登录用户的正确REST方式。我目前不在安全性方面,只是在登录模式或流程方面。(稍后,我们将添加2步oAuth,以及HMAC等) 可能的选择 张贴到类似的东西 https://api...com/v1/login.json 放置到类似 https://api...com/v1/users.json 我还没有... 用于登录用户的正确REST风格是什么?

4
是否可以通过服务器端API将事件发布到Google Analytics(分析)?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在尝试通过在后端系统中发布事件来使用Google Analytics(分析)。有什么方法可以在服务器端使用GA的API做到这一点?

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.