Questions tagged «api»

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

9
您是否应该防止来自外部API的意外值?
可以说,您正在编码一个从外部API接收输入的函数MyAPI。 该外部API MyAPI的合同规定其将返回string或number。 它是推荐的防范之类的东西null,undefined,boolean等即使它不属于API的一部分MyAPI?特别是,由于您无法控制该API,因此无法通过诸如静态类型分析之类的方法来做出保证,因此,安全起来总比对不起好。 我在考虑稳健性原则。


3
SOAP的当前意义是什么
上一次我在2013年在一家金融公司实习期间遇到了一个基于SOAP的服务。那是我开始从事IT事业的时候。我记得在我的一个工程课程中有一些关于SOAP的学习资料。除此之外,我在职业生涯中没有使用过太多SOAP。 我问这个问题是因为“ SOAP和REST之间的差异”这个问题是我最近的一次采访中出现的。据我所知(以及我在Google上所发现的),SOAP是一种在客户端和服务器之间具有紧密耦合的协议,用于信息交换,该协议与业务逻辑密切相关。REST是用于数据传输的更灵活的无状态架构。 如果我对SOAP和REST之间的区别有误,可以请我纠正我吗?另外,SOAP在当今的意义是什么?人们仍在开发新的基于SOAP的API,还是现在已经成为传统?
51 rest  api  web-services  soap 

3
做复杂的RESTful搜索方法的正确方法是什么?
遵循REST原则,我想为我的API创建一个GET方法,该方法使用一些条件进行搜索并将结果返回给客户端。问题是标准最多可以包含14个参数,其中一个是复杂对象列表,因此... 我什至不知道是否可以将这些复杂的对象与url参数进行编码/解码。 我没有计算网址可以获得多长时间,但是我确定它会足够大,甚至可能达到网址长度限制? 同样,搜索应该以“实时”方式显示结果,我的意思是,每当用户从搜索表单中更改某些内容时,他应该能够看到新结果而无需按下任何“搜索”按钮。 您能否向我澄清这些要点,对于创建具有很多参数的静态搜索方法有何建议?
44 rest  api 

3
DOM有什么不好的地方?
我一直在听到人们(尤其是Crockford)说DOM是一个糟糕的API,但并没有真正证明这一说法的合理性。除了跨浏览器不一致之外,为什么认为DOM如此糟糕还有哪些原因?

3
实际上值得对API客户端进行单元测试吗?
这已经让我困扰了一段时间。实际上值得对API客户端进行单元测试吗? 假设您正在创建一个小类,以抽象化对petshop REST API的调用。petshop是一个非常简单的API,它具有一组基本方法: listProducts() getProductDetails(ProductID) addProduct(...) removeProduct(ProductID) 在测试时,我们必须创建一个模拟服务或模拟响应。但这似乎太过分了;我知道我们想确保我们的方法不会因拼写错误/语法错误而停止工作,但是由于我们正在编写调用远程方法的函数,然后又从这些远程方法创建虚假响应,因此看起来浪费了很多精力,而我们正在测试的是不可能真正失败的东西。更糟糕的是,如果更改远程方法,则在生产使用失败时,我们的单元测试将通过。 我很确定自己丢失了某些东西,或者棍子的末端错了,或者我没有看到树木的木头。有人可以让我走上正确的路吗?
38 unit-testing  api 

8
如何阻止公司内部共享内部API密钥?
我们正在开发一项新服务-该服务可能会直接从用户设备上的应用程序中调用。这些应用程序将由组织中的多个开发团队开发并提供支持,所有这些均取决于我们提供的数据。 我们渴望确定哪些应用程序正在发送哪些请求,以便我们可以确定使用模式和负责的开发人员。(为避免疑问,用户身份验证是单独处理的。) 我们的解决方案是要求API密钥(每个应用程序一个)–然后我们需要开发团队的详细联系信息。 我们不想让API密钥成为麻烦,但是我们担心开发人员会将其共享给其他团队的同事,这意味着我们不再能够仅为一个应用程序识别流量。 我们如何激励开发人员不要在内部共享API密钥?

5
与定义一个方法可以调用相比,如何定义一个方法可以被覆盖更强的承诺?
来自:http : //www.artima.com/lejava/articles/designprinciples4.html 埃里希·伽玛(Erich Gamma):即使十年之后,我仍然认为这是真的。继承是改变行为的一种很酷的方法。但是我们知道它很脆弱,因为子类可以轻松地对调用其重写的方法的上下文进行假设。基类和子类之间存在紧密的耦合,因为隐式上下文将在其中调用我插入的子类代码。合成具有更好的属性。通过将一些较小的东西插入较大的对象中,可以减少耦合,而较大的对象仅将较小的对象回调。从API的角度来看,定义可以覆盖的方法比定义可以调用的方法要强。 我不明白他的意思。有人可以解释一下吗?

8
如何编写可以从(几乎)任何编程语言调用的一组函数?
我想找到一种编写可以通过语言绑定(或其他框架)从任何其他编程语言访问的API的方法。是否有可能做到这一点?如果是这样,哪种编程语言最适合编写“跨语言” API?我的目标是创建可以从正在使用的任何编程语言中访问的一组函数,这样就无需手动以每种语言重新编写整个API。
33 api  languages  binding 

3
如何在公共API中表示(枚举)类型
我正在开发一个简单的API,我想将其用于自己的客户端,并在将来向公众开放。我有可以具有不同“类型”的“项目”对象。目前,该类型是C“ typedef枚举”: typedef enum { ItemTypeBool, ItemTypeNumber, ItemTypeDate, } ItemType; (我将来可能会添加一些) 我想知道我是否应该将其转换为整数或定义的“字符串”。JSON为: 对于整数: { "name": "The name", "type": 0, ... } 对于字符串: { "name": "The name" "type": "boolean" ... } 我想知道是否有最佳实践。保留整数将稍微简化代码并减少带宽,但是字符串对于开发人员来说更容易记住。我记得我在一个项目上工作,我必须记住1 =图像,2 =音频,3 = html等。。。这没有任何实际意义。 所以我问你,如果你知道我应该考虑的其他方面。

2
网站应该使用自己的公共API吗?
我开始写一个Web服务,并且已经使用nodeJS和RESTfulish方法构建了。 根据我的收集: 好处是您不必重复代码。 缺点是您: 将经常更新公共API,但应通过版本控制解决 不能真正进行服务特定的缓存和优化 什么是最佳做法?Stack Exchange,Github,Twitter等网站是否为客户使用自己的API?
31 api 

9
接口命名:前缀“ Can-”与后缀“ -Able”
通常使用“ -able”作为接口的后缀,例如 可序列化可打印可枚举可饮用可射击可旋转 我以为'Can-'可能会更好,因为它可能更具描述性。是的,它比较罗y,给接口名称增加了干扰。特别地,可以使用被动动词。 例如,“ 1可射击”表示该物体能够射击(枪支可以实现这一目标),或者它可以被射击(目标板可以实现这一目标)。使用“ Can-”前缀,前者将为“ CanShoot”,后者将为“ CanBeShotAt”或“ CanShootAt”。 例如2文档“ CanBePrinted”和打印机“ CanPrint” 或者,我们应该坚持使用“ -Able”并让文档提供上下文吗? 任何意见。
29 api  interfaces 

2
为什么惯例说数据库表名应该是单数而RESTful资源应该是复数?
至少在SQL中,数据库表名称应为单数,这是一个非常明确的约定。SELECT * FROM user;请参阅此问题和讨论。 RESTful API资源名称应为复数形式,这也是一个相当明确的约定。GET /users/123并POST /users看到这个。 在最简单的数据库支持的API中,URL中的资源名称将是表,URL中的数据元素和请求/响应主体将直接映射到DB中的列。从概念上讲,我认为通过此理论API对数据进行操作与直接通过SQL对数据进行操作之间没有区别。因此,user和之间的命名约定差异users对我来说没有意义。 从概念上来说,当REST API和SQL做相同的事情时,如何证明多元化的合理性?

4
Web API身份验证技术
我们有一个asp.net MVC Web服务框架,用于为人们获取请求提供xml / json,但正在努力找出验证用户的最佳方法(对于使用javascript或OO语言进行编码的用户而言,快速,简便,琐碎)。这并不是说我们的数据是敏感数据或任何东西,我们只是希望用户注册,以便我们可以使用其电子邮件地址来通知他们更改和跟踪使用情况。 在我们先前的尝试中,我们在URI中使用了用户名,并且只需确保存在用户名并使用使用率来递增db表。这是超级基础,但我们会注意到人们使用demo作为用户名等,因此我们需要使其更加复杂。 有哪些身份验证技术可用?主要参与者使用/做什么。
26 security  api  web  services  rest 

1
REST API-特定于移动设备的挑战
我正在移动端上开发一个新的iOS应用程序项目。正在进行一些体系结构更改,事实证明,我们将不得不依赖自定义构建的私有API,该API将由我们正在构建的应用程序以及网站等其他客户端使用。 正在设计的API遵循映射到HTTP动词的以资源为中心的URI和CRUD操作的Rest样式。像: GET www.example.com/books DELETE www.example.com/books/482094 POST www.example.com/users/6793 问题在于,这种风格通常导致移动客户端需要执行许多请求来加载单个应用程序屏幕或管理单个用户UI操作。这将导致应用程序处于加载模式8秒钟,直到拥有所需的一切为止。缓慢且无响应的应用程序。 移动客户端在连接方面有严重的限制,因此理想情况下,我们应遵循以下规则: 1个屏幕== 1个API调用 1个保存== 1个API调用。 在许多情况下,这会使您与REST设计原则发生冲突,例如: 假设您的应用离线了一天,您需要与后端数据库的四个表进行同步,并且您需要像 www.example.com/sync_everything?since=2015-07-24 可以说有一个屏幕,用户可以在其中编辑许多对象,例如在待办事项列表中勾选任务。应该有一种方法可以在一个批处理API调用中编辑所有这些任务记录,而不是每次编辑都可以一个API调用。 假设有一个混合了来自ORDER,SALESMEN和PRODUCT数据库表的信息的屏幕,我应该一次调用而不是三个调用来获取该数据。 这样做的风险是,我们最终可能会获得最宁静的API,以及最无用的无响应移动应用程序。 问题是我只是那里的新承包商,我需要的是可以帮助我阐明这些要点的东西,一些受到尊敬的消息来源的文章等等。主要参与者在针对其移动客户端的REST风格上妥协(例如:通过使用复合聚合API端点)。 或针对此一般问题的任何解决方案。谢谢!
25 rest  api  ios  mobile 

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.