Questions tagged «api»

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

30
如何创建自己的编程语言和用于它的编译器[关闭]
我对编程很了解,并且遇到过各种语言,包括BASIC,FORTRAN,COBOL,LISP,LOGO,Java,C ++,C,MATLAB,Mathematica,Python,Ruby,Perl,JavaScript,Assembly等。我不明白人们是如何创建编程语言并为其设计编译器的。我也无法理解人们如何创建Windows,Mac,UNIX,DOS等操作系统。对我来说,另一件事是神秘的,人们如何创建像OpenGL,Op​​enCL,OpenCV,Cocoa,MFC等之类的库。我无法弄清的最后一件事是科学家如何设计微处理器的汇编语言和汇编器。我真的很想学习所有这些知识,而且我今年15岁。我一直想成为计算机科学家,例如Babbage,Turing,Shannon或Dennis Ritchie。 我已经读过Aho的Compiler Design和Tanenbaum的OS概念书,他们都只在高层次上讨论概念和代码。它们不涉及细节和细微差别,也不涉及如何设计编译器或操作系统。我需要一种具体的理解,以便我自己创建一个,而不仅仅是对线程,信号量,进程或解析的理解。我问我兄弟这一切。他是麻省理工学院EECS的SB学生,对如何在现实世界中实际创建所有这些东西一无所知。他所知道的只是对编译器设计和OS概念的理解,就像你们提到的(即线程,同步,并发,内存管理,词法分析,中间代码生成等)一样。

12
是否将诸如API密钥之类的秘密信息保留在源代码控制之外的策略?
我正在一个网站上工作,该网站将允许用户使用来自Twitter,Google等的OAuth凭据登录。为此,我必须在这些提供商处注册并获得我拥有的超级秘密API密钥用誓言保护身体的各个部位。如果我的钥匙结了,那部分就被拉了。 API密钥必须随我的源一起传送,因为它在运行时用于执行身份验证请求。就我而言,密钥必须存在于应用程序中的配置文件中或代码本身中。当我在一台计算机上进行构建和发布时,这不是问题。但是,当我们将源代码管理混为一谈时,事情就会变得更加复杂。 因为我是个贱人,所以我更喜欢在云或GitHub中使用免费的源代码控制服务,例如TFS。这给我带来了一个小难题: 当我的API密钥在代码中并且我的代码可在公共存储库中使用时,如何保持身体完整? 我可以想到许多方法来解决此问题,但是没有一种方法令人满意。 我可以从代码中删除所有私人信息,并在部署后重新编辑。实施起来会很痛苦(我不会在很多方面详述),并且不是一种选择。 我可以加密它。但是,由于我必须解密它,因此任何有消息来源的人都可以弄清楚该怎么做。无意义。 我可以支付私人来源控制的费用。哈哈j / k花钱了吗?请。 我可以使用语言功能将敏感信息与我的其余源代码隔离开,从而使它不受源代码控制。这就是我现在正在做的事情,但是如果错误地检查机密文件,很容易搞砸。 我真的在寻找一种有保证的方式,以确保我不会与世界共享我的私人信息(除了在手套上),这将通过开发,调试和部署而流畅地运行,并且也非常安全。这是完全不现实的。 那我该怎么办呢? 技术细节:VS2012,C#4.5,源代码管理将是TF服务或GitHub。当前使用分部类将敏感键拆分到一个单独的.cs文件中,该文件不会添加到源代码管理中。我认为GitHub可能具有优势,因为.gitignore可以用于确保不检入部分类文件,但是我之前已经搞砸了。我希望有一个“哦,常见的问题,这就是你的做法”,但我可能不得不满足于“没有那么多的吸引力”,:/

14
为什么不使用Qt编写更多的桌面应用程序?[关闭]
据我对Qt的了解和了解,它是一个非常好易学习的库。它具有设计良好的API,并且是跨平台的,而这些只是使其具有吸引力的众多功能中的两个。我想知道为什么更多的程序员不使用Qt。是否有不足之处与之相反?哪些功能使其他库比Qt更好?问题与许可有关吗?
202 api  libraries  qt 

12
API和SDK有什么区别?
当我意识到无法真正分辨出API和SDK之间的区别时,我正在研究各种API和SDK。 从概念上讲,这两种方法都是您的程序与另一种软件进行交互并控制另一种软件提供的资源的一种方式,而无论该其他软件是Web服务,最终用户应用程序,OS服务或守护程序还是内核设备驱动。 那么,SDK和API在语义上有什么区别?

3
REST API安全性存储令牌vs JWT vs OAuth
我仍在尝试寻找最佳的安全解决方案来保护REST API,因为移动应用程序和API的数量每天都在增加。 我尝试了不同的身份验证方式,但是仍然存在一些误解,因此我需要经验丰富的人的建议。 让我说说,我如何理解所有这些东西。如果我理解不正确,请告诉我。 就REST API和WEB而言,它都是无状态的,我们需要在每个请求中发送一些auth数据(cookie,令牌...)。我知道三种用于验证用户身份的广泛使用的机制 使用HTTPS的令牌。我已经使用这种方法很多次,对于HTTPS来说已经足够了。如果用户提供正确的密码和登录名,他将收到令牌作为响应,并将其用于其他请求。令牌由服务器生成并存储,例如存储在单独的表中或存储用户信息的表中。因此,对于每个请求服务器,检查用户是否具有令牌,并且该令牌与数据库中的令牌相同。一切都非常简单。 JWT令牌。该令牌是自描述的,它包含有关令牌本身的所有必要信息,用户无法更改(例如到期日期)或任何其他声明,因为该令牌是由服务器使用secret关键字生成(签名)的。这也很清楚。但是对我个人来说,一个大问题是如何使令牌无效。 OAuth2。我不明白为什么直接在服务器和客户端之间建立通信时应使用这种方法。据我了解,OAuth服务器用于发布具有受限范围的令牌,以允许其他应用程序访问用户信息而无需存储密码和登录名。对于社交网络而言,这是一个很好的解决方案,当用户想要在某个页面上进行注册时,服务器可以请求权限以获取用户信息(例如,从Twitter或Facebook获取信息),并使用用户数据等填充注册字段。 考虑将移动客户端用于在线商店。 第一个问题,我应该比第一类令牌更喜欢JWT吗?就我需要在移动客户端上登录/注销用户而言,我需要将令牌存储在某个地方,或者在JWT的情况下,令牌应该在注销时失效。使用不同的方法来使令牌无效,其中之一是创建无效的令牌列表(黑名单)。嗯 表/文件的大小比令牌存储在表中并与用户相关联并且在注销时被删除时要大得多。 那么,JWT令牌的好处是什么? 关于OAuth的第二个问题,如果与服务器直接通信,应该使用它吗?客户端和服务器之间仅发出令牌的另一层的目的是什么,但是通信将不是与oauth服务器,而是与主服务器。据我了解,OAuth服务器仅负责授予第三方应用访问用户私人信息的权限(令牌)。但是我的移动客户端应用程序不是第三方。
104 security  rest  api  oauth  https 

3
为什么硬件加速的矢量图形没有被删除?
我正在开发一个涉及以60fps实时处理矢量路径的应用程序,而关于该主题的信息很少,我感到非常惊讶。最初,我尝试使用CoreGraphics来实现我的想法,但是对于我的目的而言,它的表现并不理想。然后,我发现有一个用于硬件加速矢量图形的Khronos标准称为OpenVG,并且值得庆幸的是,一个善良的人写了一个名为MonkVG的OpenGL ES半实现。 但是,尽管事实上OpenVG是一个非常实用的API,但Khronos似乎还是放弃了它。根据Wikipedia的说法,自2011年以来,工作组“决定……不召开任何常规会议以进一步实现标准化”。据我所知,该文档仅包含一个参考卡。而且,互联网上几乎没有OpenVG的任何示例。我可以在眨眼之间找到数百个OpenGL教程,但是OpenVG似乎明显缺失。 您可能会认为,在当今分辨率迅速提高的世界中,硬件加速矢量将更为重要,而且似乎许多公司正在实现自己的方式。例如,Qt和Flash具有用于硬件加速矢量的方案,并且许多Adobe的工具都可以选择硬件加速。但是,当标准已经存在时,车轮似乎正在被彻底改造! 关于OpenVG,我是否缺少某些东西,使其不适合实际使用?还是仅仅是因为标准没有及时赶上而现在注定要变得晦涩难懂?您认为将来是否存在用于硬件加速矢量图形的标准化API的空间,还是使用基于栅格的传统技术会更容易?还是矢量在进入之前就只是在走出去?


7
通过URI与查询字符串设计REST API
假设我有三个相关的资源,如下所示: Grandparent (collection) -> Parent (collection) -> and Child (collection) 上面这样描述了这些资源之间的关系:每个祖父母可以映射到一个或几个父母。每个父母可以映射到一个或几个孩子。我希望能够支持针对子资源的搜索,但具有过滤条件: 如果我的客户给我传递了一个祖父母的ID参考,那么我只想搜索是该祖父母的直接后代的孩子。 如果我的客户向我传递了对父母的ID引用,我只想搜索父母直接后代的孩子。 我想到过这样的事情: GET /myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text} 和 GET /myservice/api/v1/parents/{parentID}/children?search={text} 分别满足上述要求。 但是我也可以这样做: GET /myservice/api/v1/children?search={text}&grandparentID={id}&parentID=${id} 在这种设计中,我可以允许我的客户端向我传递查询字符串中的一个或另一个:grandparentID或parentID,但不能两者都传递。 我的问题是: 1)哪种API设计更RESTful,为什么?在语义上,它们的含义和行为方式相同。URI中的最后一个资源是“子代”,有效地暗示客户端正在子代资源上运行。 2)从客户的角度看可理解性以及从设计者的角度看可维护性方面,每种方法的优缺点是什么。 3)除了对资源进行“过滤”外,查询字符串的真正用途是什么?如果采用第一种方法,则将filter参数作为路径参数而不是查询字符串参数嵌入到URI本身中。 谢谢!
73 design  rest  api 


8
如果多个操作以不同的状态结束,该返回什么HTTP状态代码?
我正在构建一个API,用户可以在其中请求服务器在一个HTTP请求中执行多项操作。结果以JSON数组的形式返回,每个动作一个条目。 这些操作中的每一个都可能彼此独立失败或成功。例如,第一个操作可能会成功,第二个操作的输入格式可能不正确,无法验证,第三个操作可能会导致意外错误。 如果每个动作有一个请求,我将分别返回状态码200、422和500。但是,现在只有一个请求时,我应该返回什么状态码? 一些选项: 始终返回200,并在正文中提供更多详细信息。 也许仅在请求中有多个动作时才遵循上述规则? 如果所有请求成功,也许返回200,否则返回500(或其他代码)? 每个动作只使用一个请求,并接受额外的开销。 完全不同吗?
72 api  http 

4
为什么在接口中使用“可选方法”实现Java集合?
在扩展Java集合框架的第一个实现过程中,我很惊讶地看到集合接口包含声明为可选方法的方法。如果不支持,则期望实现者抛出UnsupportedOperationExceptions。这立即让我感到震惊,因为它是糟糕的API设计选择。 在阅读了约书亚·布洛赫(Joshua Bloch)出色的“有效Java”(Effective Java)书之后,后来得知他可能对这些决定负有责任,但似乎并没有遵循书中所遵循的原则。我想声明两个接口:Collection和MutableCollection,它通过“可选”方法扩展Collection,将导致可维护性更高的客户端代码。 还有的问题一个很好的总结在这里。 是否有充分的理由为什么选择了可选方法而不是两个接口实现?

3
RESTful API中的斜杠
我一直在争论如何使用RESTful API中的斜杠。 可以说我有一个称为狗的资源,而每个狗都有从属资源。因此,我们可以执行以下操作: GET/PUT/POST/DELETE http://example.com/dogs GET/PUT/POST/DELETE http://example.com/dogs/{id} 但是,如何处理以下特殊情况: GET/PUT/POST/DELETE http://example.com/dogs/ 我个人的观点是,这是向id = =的单个狗资源发送请求null。我认为在这种情况下,API应该返回404。 其他人则说请求正在访问dogs资源,即尾部的斜杠将被忽略。 有人知道最终答案吗?
60 api  rest  http 

7
RESTFul:状态更改操作
我正计划构建RESTfull API,但是有些架构问题正在脑海中产生一些问题。我想避免向客户端添加后端业务逻辑,因为当业务逻辑可以快速更改时,很难实时维护多个客户端平台的更新。 假设我们将文章作为资源(api / article),我们应该如何实现诸如发布,取消发布,激活或停用之类的操作,但又要尽量使其简单? 1)我们是否应该使用api / article / {id} / {action},因为在那里可能会发生很多后端逻辑,例如推送到远程位置或更改多个属性。可能最难的是,我们需要将所有文章数据发送回API进行更新,并且无法实现多用户工作。例如,编辑器可以发送5秒钟的旧数据,并覆盖其他记者2秒钟前所做的修复,而我无法向客户解释这一点,因为发布文章的人实际上与更新内容没有任何关系。 2)创建新资源也可以是api / article- {action} / id选项,但返回的资源将不是article- {action},但我不确定这是否合适。同样在服务器端代码文章类中,正在处理两种资源上的实际工作,并且我不确定这是否与RESTfull思想背道而驰。 任何建议都欢迎。
59 api  rest 

8
何时在API中使用HTTP状态代码404
我正在做一个项目,在与工作人员争论了一个多小时之后。我决定知道堆栈交换中的人会说些什么。 我们正在为系统编写API,有一个查询应返回组织树或目标树。 组织树是用户所在的组织,换句话说,该树应始终存在。在组织中,应该始终存在目标树。(这是参数开始的地方)。如果树不存在,我的同事决定以状态码200回答响应是正确的。然后开始要求我修复我的代码,因为没有树时应用程序就崩溃了。 我会尽力避免火焰和愤怒。 我建议在没有树的情况下引发404错误。这至少会让我知道出了点问题。使用200时,我必须在成功回调中的响应中添加特殊检查以处理错误。我期望收到一个对象,但实际上可能会收到一个空响应,因为未找到任何内容。将响应标记为404听起来很公平。然后战争爆发了,我收到一条消息,说我不理解HTTP状态代码架构。所以我在这里,问在这种情况下404有什么问题?我什至得到了“它什么也没发现,所以返回200是正确的”的说法。我相信这是错误的,因为树应该一直存在。如果我们什么也没找到,并且期望得到结果,则应该是404。 更多信息, 我忘记添加获取的网址。 组织机构 /OrgTree/Get 目标 /GoalTree/GetByDate?versionDate=... /GoalTree/GetById?versionId=... 我的错误,两个参数都是必需的。如果提供了可以解析为日期的任何versionDate,它将返回关闭修订。如果您输入过去的内容,它将返回第一个修订版。如果按ID标识的ID不存在,我怀疑它将返回200的空响应。 额外 另外,我认为,对这个问题的最佳答案是在创建组织时创建默认对象,没有树不应该是有效的情况,应视为未定义的行为。没有两棵树就无法使用一个帐户。因此,它们应该始终存在。 我也链接了这个(一个相似但我找不到) http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png

4
在特殊情况下,我们可以接受重复的代码吗?
我正在一个软件项目中,我们必须构建三个API。一个用于家庭银行业务渠道,一个用于代理渠道,第三个用于移动渠道。 代理API是最完整的API,因为它具有所有功能。然后是更小的Home API,然后是移动API。 此处的架构师建立了一个公共层(所有API共享的跨通道EJB服务)。但是那时的API是不同的。 目前,这些API之间没有太大的区别。大型团队从代理商渠道开始,现在我们正在对其进行调整以适合家庭渠道。我们只是在为我们的家庭应用专门添加对象。否则,API之间的代码相似度为95%。这些API建立在Spring MVC之上,并且具有(控制器,模型和一些实用程序)。 基本上,控制器正在将BO映射到ChannelObject(在我看来,这样做不合适的地方),以及一些额外的实用程序和序列化程序。目前所有重复项。他们说重复的原因是他们希望API独立。“如果明天我们想要的家庭行为不同于代理商或移动设备,我们将不会挣扎!” 是否存在我们应该接受重复代码的情况?
57 java  api  spring 

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.