Tag: 谷歌API

API和SDK之间的区别

我正在向非开发人员解释API和SDK之间的区别。 我需要解释为什么一个商业指纹软件供应商可能不会提供一个SDK,尽pipe他们肯定会使用一个。 设备供应商和软件供应商都可以并应该公开一个定义良好的API。 这个API允许其他软件程序(被写入)与供应商自己的软件组件或硬件设备交互操作。 如果有人有更多的想法来解释清楚,我非常感谢这些build议。 我想强调的是,目标是向不懂开发者术语的非程序员解释概念 。 具体来说,在指纹传感器与软件进行登记/validation的情况下,我试图解释它: 如果我是一个指纹设备/传感器制造商,而不是写软件的业务,我可以更好地推销我的产品的方式是: 确保我的设备驱动程序可以安装在各种操作系统上 为软件开发人员定义并提供一个API来编写程序(例如用于注册,validation)来“交谈”或使用我的设备 开发和提供一个SDK(API超越了一个步骤),使软件开发人员能够更轻松,更快地编写与​​我的设备配合使用的程序。 SDK可能提供帮助代码库,参考应用程序,文档等

.NET中API断开更改的权威指南

我想尽可能多地收集有关.NET / CLR中API版本化的信息,特别是API更改如何做或不做中断客户端应用程序。 首先,我们来定义一些术语: API更改 – 对types的公开可见定义(包括其任何公共成员)的更改。 这包括更改types和成员名称,更改types的基types,从types的已实现接口列表中添加/删除接口,添加/删除成员(包括重载),更改成员可见性,重命名方法和types参数,添加默认值对于方法参数,在types和成员上添加/删除属性,以及在types和成员上添加/删除genericstypes参数(我错过了什么?)。 这不包括成员机构的任何变化,或私人成员的任何变化(即我们没有考虑到反思)。 二进制级别中断 – API更改导致客户端程序集针对旧版API进行编译,可能无法使用新版本加载。 示例:更改方法签名,即使它允许以与以前相同的方式调用(即:void返回types/参数默认值重载)。 源代码级别中断 – API更改导致现有代码被编写为针对较早版本的API进行编译,可能无法使用新版本进行编译。 但是,已编译的客户端程序集像以前一样工作。 例如:添加一个新的重载,可能导致以前明确的方法调用不明确。 源代码级安静语义更改 – 导致现有代码写入API的老版本API进行编译的API更改会悄悄地改变其语义,例如通过调用不同的方法。 该代码应该继续编译没有警告/错误,以前编译的程序集应该像以前一样工作。 例如:在现有的类上实现一个新的接口,导致在重载parsing期间select不同的过载。 最终的目标是尽可能多地编目尽可能多的破坏性和安静的语义API变化,描述破坏的确切效果,以及哪些语言不受其影响。 为了扩展后者:尽pipe一些变化普遍影响所有语言(例如,向接口添加新成员将会以任何语言破坏该接口的实现),但是一些需要非常特定的语言语义来进入rest。 这通常涉及方法重载,并且通常涉及任何与隐式types转换有关的操作。 在这里,即使对于符合CLS的语言(即至less符合CLI规范中定义的“CLS消费者”规则的语言),在这里似乎也没有任何方法来定义“最小公分母” – 尽pipe我会欣赏有人纠正我在这里是错误的 – 所以这将不得不通过语言去语言。 那些最感兴趣的人自然就是.NET开箱即用的:C#,VB和F#; 但是其他的如IronPython,IronRuby,Delphi Prism等也是相关的。 angular落案例越多,它就越有意思 – 像删除成员这样的事情是不言而喻的,但是,例如方法重载,可选/默认参数,lambdatypes推断和转换操作符之间的微妙交互可能是非常令人惊讶的有时。 几个例子来启动这个: 增加新的方法重载 种类:源级别中断 受影响的语言:C#,VB,F# 更改前的API: public class Foo { public void Bar(IEnumerable x); } 更改后的API: public class Foo […]

为移动应用程序创build一个API – 身份validation和授权

概观 我正在为我的应用程序创build一个(REST)API。 初始/主要目的是供移动应用程序(iPhone,Android,Symbian等)使用。 我一直在寻找不同的机制来validation和授权基于networking的API(通过学习其他实现)。 我的头脑里缠绕着大部分的基本概念,但仍然在一些领域寻找指导。 我想做的最后一件事是重新发明轮子,但是我没有find符合我的标准的标准解决scheme(但是我的标准被误导了,所以也可以随意批评)。 另外,我希望API对于所有使用它的平台/应用程序都是一样的。 OAuth的 我会继续向oAuth抛出我的反对意见,因为我知道这可能是提供的第一个解决scheme。 对于移动应用程序(或更具体的非Web应用程序),将应用程序(转到Web浏览器)进行身份validation似乎是错误的。 此外,浏览器无法(我知道)将callback函数返回给应用程序(特别是跨平台)。 我知道有几个应用程序可以这样做,但是它只是感觉不对而且在应用程序用户体验(UX)方面有所突破。 要求 用户input用户名/密码到应用程序。 每个API调用都由调用应用程序标识。 开销保持在最低限度,对于开发者来说,authentication方面是直观的。 该机制对于最终用户(他们的login凭证不公开)以及开发者(他们的应用凭证不公开)是安全的。 如果可能的话,不要求https(绝不是硬性要求)。 我现在的执行思路 外部开发人员将请求一个API帐户。 他们将收到apikey和apisecret。 每个请求至less需要三个参数。 apikey – 在注册时给予开发者 时间戳 – 双倍作为给定apikey的每个消息的唯一标识符 散列 – 时间戳+ apisecret的散列 apikey需要识别发出请求的应用程序。 时间戳的作用类似于oauth_nonce,并避免/减轻重放攻击。 哈希确保请求实际上是从给定apikey的所有者发出的。 对于通过身份validation的请求(代表用户完成的),我仍然不确定要使用access_token路由还是用户名和密码哈希组合。 无论哪种方式,在某个时候,用户名/密码组合将是必需的。 所以当它的时候,会使用几条信息(apikey,apisecret,timestamp)和密码的散列。 我喜欢这方面的反馈意见。 仅供参考,他们将不得不先散列密码,因为我不存储密码在我的系统没有散列。 结论 仅供参考,这不是一个如何构build/构buildAPI的请求,而只是如何处理来自应用程序中的validation和授权。 随机思考/奖金问题 对于仅需要apikey作为请求一部分的API,如何防止除apikey所有者以外的人能够看到apikey(由于发送明文),并提出过多的请求来推动他们超出使用限制? 也许我只是在想这个,但是不应该有什么东西来validation一个请求被apikey所有者validation了吗? 在我的情况下,这是apisecret的目的,它不会被显示/传输没有被哈希。 说到哈希,md5 vs hmac-sha1呢? 当所有的数据都用足够长的数据(即apisecret)进行散列时,真的很重要吗? 我以前曾经考虑添加每个用户/行盐到我的用户密码哈希。 如果我这样做,那么应用程序如何能够在不知道所使用的盐的情况下创build一个匹配的哈希?

API与Web服务

web服务和API有什么区别? 差异比用于传输数据的协议更多吗? 谢谢。

让setter返回“this”是不好的做法?

在java中使setter返回“this”是好的还是坏主意? public Employee setName(String name){ this.name = name; return this; } 这种模式可以是有用的,因为那样你可以像这样链接setter: 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描述的那样,它有一个关联的静态生成器类来创build对象。

如何检查Receiver是否在Android中注册?

我需要检查我的注册接收者是否仍然注册,如果不是我如何检查任何方法?

有没有Google Keep API?

有没有Google Keep的API? 我想为Google Keep制作一个Windows 8应用程序,以便与您的手机进行同步。 我查看了Drive SDK,因为Google Keep是Google云端硬盘的扩展,但是我找不到它。

SPI和API的区别?

服务提供者接口(SPI)和应用程序编程接口(API)有什么区别? 更具体地说,对于Java库,是什么使它们成为API和/或SPI?

连字符,下划线或camelCase作为URI中的单词分隔符?

我正在为Intranet应用程序devise一个基于HTTP的API。 我意识到在事物的macros伟计划中这是一个非常小的问题,但是: 我应该使用连字符,下划线还是驼峰来分隔URI中的单词? 这是我最初的想法: 骆驼香烟盒 如果服务器不区分大小写,可能会出现问题 似乎在查询string键( http://api.example.com?searchQuery = …)中有相当广泛的用途,但在其他URI部分 连字符号 比其他select更美观 似乎被广泛用于URI的path部分 从来没有在野外看到连字符查询string键 可能更好的search引擎优化(这可能是一个神话) 下划线 编程语言可能更容易处理 一些stream行的API(Facebook,Netflix,StackExchange等)在URI的所有部分使用下划线。 我倾向于所有的下划线。 大多数大牌玩家正在使用它们的事实引人注目(请参阅https://stackoverflow.com/a/608458/360570 )。

错误:invalid_client没有应用程序名称

我正在为我的应用程序使用Google Apps API,并尝试使用OAuth2对其进行授权。 我使用Google API控制台创build了一个项目和一个应用程序。 我正在使用以下URL进行授权: https://accounts.google.com/o/oauth2/auth&scope=https://www.googleapis.com/auth/admin.directory.user&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=(my application clientid) 我得到以下错误, Error: invalid_client no application name Request Details 我已经validation了pipe理员SDK的状态,甚至是状态。