连接到 REST API 服务

使用 Solar2D,您可以连接到各种在线服务以将数据获取到您的应用程序中。为此,一个流行的选项是 REST(或 RESTful)API,它们基于标准 HTTP 协议并且通常易于进行身份验证。

REST 概述

许多服务都通过 REST 提供其数据,您可以使用标准 HTTP“动词”来访问这些数据

REST 使用标准 HTTP URL 来定义 API。例如,使用 Twitter,您可以通过 GET 请求访问以下内容以获取用户朋友列表

https://api.twitter.com/1.1/friends/list.json

让我们更详细地检查一下

身份验证

大多数 REST API 需要某种形式的验证或身份验证,尤其是在您尝试添加或更新数据时。身份验证可以通过多种方式进行,例如通过将用户名和密码作为域名的一部分传递

https://username:[email protected]/someapi/dosomething.json

在本例中,username:password 方法是使用请求头表格的快捷方式。“用户名”和“密码”有时会被称为“API 密钥”和“密钥”,它们可能需要以某种方式进行编码,例如 MD5

另一种方法是使用请求头表格,将在下面详细讨论。

进行 API 调用

您的 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 动词以及哪些参数。此外,每个服务似乎都以略微不同的方式实现身份验证,但本教程应该可以让您开始使用基于 REST 的来自各种提供商的 API。