API 使用约定

Posted

技术标签:

【中文标题】API 使用约定【英文标题】:API usage conventions 【发布时间】:2011-11-26 06:25:53 【问题描述】:

我对在 Web 开发中使用 API 很陌生。我正在使用 python/django 中的 Web 应用程序向 Giantbomb api 发出 ajax jsonp 请求。当我学习如何使用这个 api 来获取所需的信息时,我开始意识到出于各种效率/安全原因,某些事情可能应该在我的代码中得到更好的处理。但我不熟悉使用基于 Web 的 API 的约定。以下是我一直在思考的几个问题:

    将我的 api-key 放在地址栏或源中是不是很糟糕。 由于我使用的是 Django/Python,我是否应该为每个 api 请求创建一个自定义视图并使用 simplejson?我想使用 AJAX 来减少请求数量,并获得更好的动态 UI。 在这些情况下,是否将 api-keys、api-urls 保存到会话中,然后根据需要进行访问?

提前感谢您的帮助和耐心,

【问题讨论】:

【参考方案1】:

    让用户可以看到您的 API 密钥意味着他们可以像您一样执行请求。这是否不好取决于相关的 API。如果可以进行三足身份验证,您的服务器可以与 API 服务器协商一个临时密钥(例如 Oauth 的会话密钥),并且只与浏览器共享该临时密钥。

    如果您打算让浏览器通过 AJAX 执行 API 请求,则您的视图根本不会进入图片,除了将 API 凭据传递给浏览器以在 javascript 中使用。

    1234563 .但它仍然需要传递给浏览器,假设它正在执行实际的 API 请求。

【讨论】:

2.我考虑处理这个问题的一种方法是创建我自己的 api,将请求转发到 Giantbomb api。所以我会做一个 ajax 我自己的 api/view 向 Giantbomb api 发出 jsonp 请求。我现在唯一的问题是我知道如何使用 Python/Django 处理 jsonp 请求。 啊,如果你的计划是让服务器执行请求,你真的不需要 jsonp。有几个包可以使与外部 API 的通信变得容易,但这取决于它是什么类型的 API。如果是 REST,请查找 python REST 库。如果它是自定义的,您需要找到一个或自己编写 - 我建议查看 python 包“requests”。 +1 用于 python 请求。当我在试验这个项目并使用 urllib2 来处理我的请求时,我就像“这一切都是为了提出一个简单的请求?......wtf”。谢谢哟!

以上是关于API 使用约定的主要内容,如果未能解决你的问题,请参考以下文章

RESTful API 设计约定

API命名约定,URI中的相同资源名词

为什么 Windows API 使用 stdcall 调用约定?

elasticsearch 第四篇(API约定)

Code First约定-Fluent API配置

RESTFUL API 中“操作”的命名约定