Questions tagged «api»

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

5
乔达时间vs Java时间
尽管Joda具有丰富的功能,并且比标准Java时间更为复杂,但它不一定总是最好的使用方式。如何确定在任何Java代码中应使用Joda Time还是Java Time? 是否有某种准则可以告诉我们如何根据我们的要求选择合适的准则?
19 java  api  joda-time 

3
解耦胜过REST中的DRY吗?
我正在构建REST API,以公开现有Java API的大部分功能。这两个API都供我的组织内部使用;我不必为外部使用而设计。我对这两种API都有影响,但是正在实现REST。Java API将继续用于本地应用程序(不会“淘汰”),但是REST API将用于重大的新开发。 一些Java API类只是数据(带有属性,getter,setter的bean)。并且至少其中一些有意义的是通过REST API以某种形式(作为数据(将被编组为XML或JSON))进行传输。例如,一个存储有关服务器计算机信息的类。对于这些数据类,我面临以下选择:我是否... 直接在REST API中公开原始Java类(或子类),或者 专门为REST API创建新的数据传输类(DTO模式)? 无论哪种方式,我都会有REST数据传输类。问题是是要注释原始文件还是创建新的文件(可能是原始文件的副本)。可能还有其他选择,但我将主要关注这两个。 #1的参数: 干(不要重复自己) 实施更快 升级REST API更容易 #2的参数: 如果REST API需要与Java API分开版本,该怎么办?(这很有可能。) 如果Java数据类发生重大更改(例如,删除属性,添加行为或更改类层次结构)怎么办?(这也有可能。) 底线是,似乎在DRY(#1)和去耦(#2)之间进行了权衡。 我倾向于从#1开始,然后如果出现问题,然后再转到#2,请遵循不构建无法证明自己需要的敏捷指导。这是一个坏主意吗; 如果我认为我最终还是会从那里开始,我应该从#2开始吗? 我的清单中是否缺少主要的论据/后果?
19 java  api  rest  coupling  dry 

5
内部和外部API架构
我工作的公司保持着成功的SaaS产品,这些产品多年来“有机地”增长了。我们计划用一系列新产品扩展产品线,这些新产品将与现有产品共享数据。为此,我们希望将业务逻辑整合到一个地方:Web服务层。WS层将由以下人员使用: 网络应用 导入数据的工具 与其他客户端软件集成的工具(本身不是API) 我们还希望创建一个可供我们的客户使用的API,这些客户可以使用该API创建自己的集成。我们正在努力解决以下问题: 内部API(又称WS层)与外部API是否应在同一方面,并​​具有安全性和权限设置以控制谁可以完成操作,还是应该是两个单独的应用程序,其中外部API仅调用内部API像其他应用程序一样?到目前为止,在我们的辩论中看来,将它们分开可能更安全,但会增加开销。 其他人在类似情况下做了什么?
19 api  web  web-services 

2
REST API设计:对API的多次调用与单次调用
我们正在开发用于电子商务网站的Rest API,它将由移动应用程序使用。 在应用程序的首页中,我们需要调用多个资源,例如滑块,顶级品牌,畅销产品,热门产品等。 进行API调用的两个选项: 单次通话: www.example.com/api/GetAllInHome 多个通话: www.example.com/api/GetSliders www.example.com/api/GetTopBrands www.example.com/api/GetBestSellingProducts www.example.com/api/GetTrendingProducts 其余api设计的最佳方法是哪种-一次或多次调用,说明优缺点? 哪个会花更多时间来响应请求?
19 rest  api  api-design  url 

1
SOA /微服务:如何处理服务间通信中的授权?
前景 我们正在从单一平台过渡到更加面向服务的体系结构。我们正在应用非常基本的DDD原则,并将我们的域划分为不同的有界上下文。每个域都是分布式的,并通过Web API(REST)公开服务。 由于我们的业务性质,我们提供诸如订舱,服务,客户,产品等服务。 我们还建立了一个Identity Server(基于Thinktecture Identity Server 3),其主要作用是: 集中身份验证(给定颁发令牌的凭据) 在令牌中添加声明,例如:客户范围(按照客户,我是指执行请求的应用程序),客户标识符(按照客户,我是指使用该应用程序的人) 我们还介绍了API网关的作用,它可以集中外部访问我们的服务。API网关提供的功能不需要深入了解内部域,例如: 反向代理:将传入请求路由到适当的内部服务 版本控制:API网关的一个版本映射到内部服务的不同版本 身份验证:客户端请求包括由Identity Server发行的令牌,API网关会验证令牌(确保用户说的是她的身份) 节流:每个客户端的请求数量限制 授权书 与授权有关,这不是在API网关中管理,而是在内部服务本身中进行管理。我们目前正在执行两种主要的授权类型: 基于客户范围的授权。示例:客户端(使用我们的API的外部应用程序)需要范围“ bookings”来访问Bookings服务API端点 基于客户的授权。示例:仅当客户(使用应用程序的自然人)是预订的参与者时,才能从预订服务访问端点GET / bookings 为了能够处理内部服务中的授权,API网关仅转发令牌(在将请求路由到内部服务时),该令牌既包含有关客户端(执行请求的应用程序)的信息,也包含有关客户的信息(作为声明)有人在客户端应用程序中登录的情况)。 问题描述 到目前为止,到目前为止还不错,直到我们引入了服务间通信(某些服务可以与其他服务进行通信以获得一些数据)。 题 在服务间通信中,我们应该如何处理授权? 考虑的选项 为了讨论不同的选项,我将使用以下示例方案: 我们有一个名为ExternalApp的外部应用程序,该应用程序访问我们的API(可以将ExternalApp视为客户端),以建立预订流程 ExternalApp需要访问预订服务,因此我们授予ExternalApp范围“预订” 在内部(这对于ExternalApp来说是完全透明的),预订服务使服务服务获得预订的默认服务,例如航班,保险或租车 在内部讨论此问题时,会弹出几个选项,但我们不确定哪个选项最好: 当Bookings与Services通信时,它应该只转发他从API网关收到的原始令牌(表明客户端是ExternalApp)。 启示:我们可能需要将不应该被授予的范围授予ExternalApp。示例:ExternalApp可能需要同时具有“预订”和“服务”范围,而只有“预订”范围才足够 当Bookings与Services通信时,它转发一个令牌,指示该客户端现在已成为Bookings(而不是ExternalApp),并且添加了一个声明,表明Bookings模仿了原始客户端ExternalApp 通过还包括原始客户端是信息ExternalApp的服务业务也可以做逻辑如过滤取决于原调用一些服务(如用于内部应用程序,我们应该返回所有的战斗,外部应用程序只有一些) 服务不应相互通信(因此我们甚至不应面对这个问题) 预先感谢您的输入。

2
“暴露”某物是什么意思?
因此,我正在创建Google App Engine应用程序,并且多次遇到“公开”一词,例如“您的第一个应用程序可以使用基于HTTP的API公开对象”和“通过REST API”。“暴露”是什么意思?是否有与之相关的特定动作,或者它是设计的抽象部分?

4
弃用Web API:最佳做法?
最终,您需要折旧部分公共Web API。但是,我对最好的方法感到困惑。如果您拥有大型的第三方应用程序库,仅仅废弃旧版本的API似乎是错误的方法,因为几乎所有应用程序都会在一夜之间失败。但是,您可能无法永远保持古老的Web api的可用性,因为它可能已过时,或者发生了重大更改,因此无法使用它。 淘汰旧的Web API的最佳做法是什么?
18 api 

1
放置API密钥的位置:自定义HTTP标头与自定义方案的Authorization标头
我正在设计一个通过API密钥使用授权/身份验证的REST API。 我试图找出最合适的位置,然后发现许多人建议使用自定义HTTP标头ProjectName-Api-Key,例如: ProjectName-Api-Key: abcde 但在Authorization标头上使用自定义方案也是可能的,从思想上来说也是正确的,例如: Authorization: ApiKey abcde 另一方面,我发现一个考虑,自定义授权方案可能出乎意料,并且不受某些客户端支持,并且无论如何都会导致自定义代码,因此最好使用自定义标头,因为客户对此没有任何期望。 您希望以哪种方式发送API密钥?

2
API应该如何使用http基本身份验证
当API要求客户端对其进行身份验证时,我已经看到使用了两种不同的方案,并且我想知道哪种情况适合我的情况。 示例1.一个公司提供的API,允许第三方使用HTTP Basic使用令牌和机密进行身份验证。 示例2. API通过HTTP Basic接受用户名和密码来认证最终用户。通常,他们会获得令牌以供将来请求。 我的设置:我将有一个JSON API,它将用作移动和Web应用程序的后端。对于移动应用程序和Web应用程序来说,似乎都附带令牌和秘密发送的好习惯,因此只有这两个应用程序才能访问阻止任何其他第三方的API。 但是移动和Web应用程序允许用户登录和提交帖子,查看其数据等。因此,我希望他们也可以通过HTTP Basic在每次请求时登录。 我会以某种方式同时使用这两种方法还是仅在每个请求上发送最终用户凭据(用户名和令牌)?如果仅发送最终用户凭据,是否将它们存储在客户端的Cookie中?

6
此时,Java的公共领域是否只是一个悲剧的历史设计缺陷?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 在这一点上,Java似乎是正统的,基本上不应将公共字段用于对象状态。(我不一定同意,但这与我的问题无关。)考虑到这一点,可以说从今天开始的今天,很显然Java的公共领域是语言设计的错误/缺陷?还是有一个合理的论据,即使在今天,它们仍然是语言的有用和重要的一部分? 谢谢! 更新:我知道更优雅的方法,例如C#,Python,Groovy等。我不是直接在寻找这些示例。我真的只是想知道是否还有人在掩体深处,喃喃地谈论着真正的公共场所有多美妙,群众如何全都是羊,等等。 更新2:显然,静态的最终公共字段是创建公共常量的标准方法。我指的是将公共字段用于对象状态(甚至是不可变状态)。我认为应该将公共字段用作常量而不是状态,这似乎是一种设计缺陷,一种语言的规则应自然而然地通过语法而不是准则来强制执行。

3
Web API如何工作?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我听说过许多Web API,例如Facebook,Twitter等,它们可以帮助第三方访问和操纵数据。我想知道Web API的工作原理。Web API的基础知识是什么? 如果我想为我的网站创建一个API,以便人们可以访问或更新它,那么我首先需要做什么?

4
合并多个HTTP请求以节省带宽是否是一个好主意?
我正在准备一个单页应用程序,该应用程序有时会在缓慢的移动连接上使用。就API请求而言,它的某些部分相当繁重(为新的屏幕显示获取10个不同的资源)。 现在,将这些服务合并到提供所有必需数据的服务中,但是就REST原理而言不是“纯”的,这是一个好主意吗?是否会有可观的性能提升?
16 api  rest  http 

2
何时在RESTful API中使用嵌套资源
我有两个资源:用户和链接。 用户可以具有几个与之关联的链接。我已经设计了RESTful API,以便您可以通过以下URI访问与用户关联的链接: /users/:id/links 但是,我总是需要一个仅用于链接的URI –有时我可能想要所有链接,无论用户是谁。 为此,我有: /links 听起来还好吗?有两个链接的URI吗? 我想知道是否应该使用URI来访问用户的链接,例如: /links/user/:id 要么 /links/?user=:id 这样,我只有一个链接资源。
16 api  rest  api-design 

1
为什么大多数API网关解决方案都不支持“聚合”?
在阅读有关API Gateway的内容时,每一次出现的一件事是API Gateway是一个您应该在其中汇总多个端点的结果的地方。听起来真的很好。但是,许多流行的API网关解决方案(例如AWS API Gateway,Kongo和Netflix Zuul)不支持该功能。您需要自己修改或实施自定义过滤器。 聚合被视为不良做法吗?人们如何从多个端点返回结果?

1
RESTful API和i18n:如何设计响应?
我们正在设计一个RESTful API,主要用于满足单个客户端的需求。由于其非常特殊的情况,此客户端必须发出尽可能少的请求。 API通过请求中的Accept-Language标头处理i18n。这适用于客户端需要做的所有事情,除了一项功能外,在该功能中,客户端需要在所有可用的语言环境中存储对单个端点的请求响应。 我们是否可以以某种方式设计API,使客户端可以在单个请求中获取所有这些信息,而又不会破坏一致的,结构良好的RESTful API设计? 到目前为止,我们已经考虑的选项: 允许在Accept-Language标头中包含多个语言环境,并在响应中为所有请求的语言环境添加本地化版本,每个语言环境均以其ISO 639-1语言代码标识为密钥。 为该端点创建类似“?all_languages = true”的参数,并在响应中返回所有可用语言环境的本地化版本(如果存在该参数的话)。 (如果以上方法对我们都不起作用),将发出多个请求以从客户端获取所有本地化版本。 哪一个是最好的选择?
15 rest  api  api-design  http 

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.