使用 Solar2D,您可以连接到各种在线服务以将数据获取到您的应用程序中。为此,一个流行的选项是 REST(或 RESTful)API,它们基于标准 HTTP 协议并且通常易于进行身份验证。
许多服务都通过 REST 提供其数据,您可以使用标准 HTTP“动词”来访问这些数据
GET
— 用于“获取”(提取)数据。POST
/PUT
— 用于将数据发送到服务器。DELETE
— 用于删除数据(如果允许)。REST 使用标准 HTTP URL 来定义 API。例如,使用 Twitter,您可以通过 GET
请求访问以下内容以获取用户朋友列表
https://api.twitter.com/1.1/friends/list.json
让我们更详细地检查一下
大多数服务都通过安全协议 (https://
) 运行其 API,协议后跟主机名。
主机名之后通常是 API 版本 — 在本例中,/1.1
表示这是 API 的 1.1
版本。这允许服务更改其 API 定义以添加/更新功能或更改数据,而不会破坏使用先前版本的旧应用程序。
接下来通常是功能类别。在本例中,Twitter 的所有“朋友”API 都分组在 /friends
系列下。
最后,特定的 /list
API 将获取当前用户的朋友列表,该列表以 JSON 格式进行格式化,可与 Solar2D 轻松兼容(或者,某些服务允许您通过指定 .xml
而不是 .json
来请求 XML 数据)。
大多数 REST API 需要某种形式的验证或身份验证,尤其是在您尝试添加或更新数据时。身份验证可以通过多种方式进行,例如通过将用户名和密码作为域名的一部分传递
https://username:[email protected]/someapi/dosomething.json
在本例中,username:password
方法是使用请求头表格的快捷方式。“用户名”和“密码”有时会被称为“API 密钥”和“密钥”,它们可能需要以某种方式进行编码,例如 MD5。
另一种方法是使用请求头表格,将在下面详细讨论。
您的 REST API 调用是通过 network.request() 进行的。对于此 API,您需要提供一个 URL、一个 HTTP“动词”、一个用于处理已完成请求的回调函数,以及一个可选的信息表,用于处理传递给服务器的请求头和数据。
让我们看一个使用基本身份验证(无请求头)的简单示例
local json = require( "json" ) local function handleResponse( event ) if not event.isError then local response = json.decode( event.response ) print( event.response ) else print( "Error!" ) end return end network.request( "https://username:[email protected]/users/friends.json", "GET", handleResponse )
或者,如果您的服务无法在 URL 中使用基本身份验证,则需要设置请求头
local json = require( "json" ) local mime = require( "mime" ) local function handleResponse( event ) if not event.isError then local response = json.decode( event.response ) print( event.response ) else print( "Error!" ) end return end local headers = {} headers["Authentication"] = mime.b64("username:password") local params = {} params.headers = headers network.request( "https://api.yourservice.com/users/friends.json", "GET", handleResponse, params )
每个服务都有自己的调用方法,因此您需要研究特定的 API 调用并了解预期的 HTTP 动词以及哪些参数。此外,每个服务似乎都以略微不同的方式实现身份验证,但本教程应该可以让您开始使用