RESTAPI文档
介绍
IPS4提供了广泛的RESTAPI,为第三方应用程序和网站提供了一种使用和创建数据的方法。例如,您可以创建新主题、注册新成员、更新成员信息、创建商业订单等等。
每个IPS4社区都提供了自己的API实例。这意味着,如果您正在构建一个社区管理员可以在其社区中启用的应用程序,那么每个社区都需要创建一个API密钥供您的集成使用,REST请求将直接发送到该社区不到我们运营的中央API位置。
授权
有两种方法可以验证对RESTAPI的请求:使用API密钥(所有版本)或使用OAuth(4.3及以上版本)。
当使用API密钥时,所有数据都可用,所有操作都可以执行。例如,如果你发送一个API请求到获取/论坛/主题
,社区中的每一个话题都会在结果中出现;如果您将API请求发送到POST /论坛/主题
您可以按以下方式创建主题:任何社区的用户。因此,保持API密钥的机密性非常重要,并且只授予对打算使用的端点的访问权。
与API键不同,当使用OAuth访问REST API时,您将提供一个访问令牌,该令牌已授予特定用户*,并且只有用户可以看到的数据和用户可以执行的操作可用。例如,如果你发送一个API请求到获取/论坛/主题
,只有经过身份验证的用户可以看到的论坛主题才会出现在结果中;如果您将API请求发送到POST /论坛/主题
主题将被创建为经过身份验证的用户,并且无法更改。
某些端点仅在使用一种或另一种方法时可用。例如获取/核心/我
获取有关经过身份验证的用户的信息,因此只能在使用OAuth进行身份验证时使用。同时帖子/论坛/论坛
创建一个论坛,该论坛仅为站点级操作,因此只能在使用API密钥*进行身份验证时使用。一些端点虽然对这两种方法都可用,但可能接受不同的请求参数,或者对于不同的方法具有不同的响应参数,这将在文档中解释。
*如果您熟悉OAuth,并且更喜欢使用它对API密钥进行身份验证,那么还可以使用客户端凭据进行身份验证,其工作方式类似于使用API密钥,从而提供对API的完全访问,而不是作为特定用户。
使用API密钥(简单)
社区管理员可以通过“AdminCP→System→REST & OAuth→API keys”生成API key。每个API Key都需要配置到它可以访问的端点。
在请求中提供API密钥的方式取决于社区所运行的服务器。推荐的方法是HTTP基本认证。发送您的API密钥作为用户名,没有密码。例如:
php communityUrl美元='https://www.example.com/ips4/';$apiKey=“c7a349a1629f02cd2855a58d77646f6d”;$endpoint=“/core/hello”;美元的旋度=旋度($communityUrl.“api”.$endpoint);curl_setopt_数组(美元的旋度,大堆(CURLOPT_RETURNTRANSFER=>真正的,CURLOPT_HTTPAUTH=>CURLAUTH_BASIC,CURLOPT_USERPWD=>“{$apiKey}:”CURLOPT_USERAGENT=>“MyUserAgent/1.0”));美元的反应=curl_exec(美元的旋度);
如果PHP作为CGI模块运行(可以通过检查服务器的phpinfo输出来确认),那么服务器可能无法看到授权标头。在Invision Community 4.5及更高版本中,您可以使用相同的base64编码凭据发送X-Authorization标头,否则您需要通过将API密钥作为狗万最低限额关键
请求中的参数。例如:
php communityUrl美元='https://www.example.com/ips4/';$apiKey=“c7a349a1629f02cd2855a58d77646f6d”;$endpoint=“/core/hello”;/*首先尝试此方法(需要Invision Community 4.5或更高狗万最低限额版本)*/美元的旋度=旋度($communityUrl.“api”.$endpoint);curl_setopt_数组(美元的旋度,大堆(CURLOPT_RETURNTRANSFER=>真正的,CURLOPT_USERAGENT=>“MyUserAgent/1.0”,CURLOPT_HTTPHEADER=>大堆(“X-授权:”.base64_编码({$ accessToken}:“)),));美元的反应=curl_exec(美元的旋度);/*或者,如果这不起作用,使用这种方法*/美元的旋度=旋度($communityUrl.“api”.$endpoint."钥匙",.$apiKey);curl_setopt_数组(美元的旋度,大堆(CURLOPT_RETURNTRANSFER=>真正的,CURLOPT_USERAGENT=>“MyUserAgent/1.0”));美元的反应=curl_exec(美元的旋度);
使用OAuth(高级)
在开始之前,您需要熟悉OAuth的基本概念。一个好的资源是OAuth 2简化版. 社区管理员可以在AdminCP中创建OAuth客户端→ 系统→ REST&OAuth→ OAuth客户端。
与API密钥一样,客户机需要配置它可以访问的端点,但是使用OAuth时,不同的端点是绑定的作用域.例如,您可以设置一个作用域来允许访问获取/配置文件
端点以获取有关经过身份验证的用户的基本信息,以及允许访问POST /论坛/主题
允许发布主题。您设置的作用域以及它们可以访问哪些端点将取决于您打算如何使用API。
然后,您将使用所需的OAuth授权类型(通常使用涉及重定向用户的授权码授予)并将其发送到授权标头中的请求中。例如:
php communityUrl美元='https://www.example.com/ips4/';accessToken美元=“c7a349a1629f02cd2855a58d77646f6d”;$endpoint=“/core/hello”;美元的旋度=旋度($communityUrl.“api”.$endpoint);curl_setopt_数组(美元的旋度,大堆(CURLOPT_RETURNTRANSFER=>真正的,CURLOPT_USERAGENT=>“MyUserAgent/1.0”,CURLOPT_HTTPHEADER=>大堆(“授权:持票人{$accessToken}”),));美元的反应=curl_exec(美元的旋度);
在In狗万最低限额vision Community OAuth客户端中,客户端标识符长度为32个字符,客户端秘密长度为48个字符,授权码长度为64个字符,访问令牌长度为97个字符。
参数
对于所有GET请求,在查询字符串中提供参数。对于PUT和POST请求,所有参数都应以正文中编码的URL形式发送。
回答
API的响应如下所示:总是JSON编码。
错误处理
遇到错误时,您将收到如下响应:
{“errorCode”:“3S290\/7”,“errorMessage”:“无效的API密钥”}
每个端点可能的错误代码/消息在本文档参考中有详细说明。除了端点特定的错误外,还可能返回以下全局错误:
代码 | 消息 | 描述 |
---|---|---|
1 s290 /一个 或1 s290 / C |
IP地址被禁止 |
发送请求的IP地址已被社区禁止。如果IP地址重复发送了许多带有无效API密钥的请求,则可能会自动发生这种情况。 |
1 s290 / D |
太多的\u请求\u密钥不正确\u |
发送请求的IP地址使用无效的API密钥发送了多个请求,因此在几分钟内无法发送更多请求。 |
2 s290/6 |
无API密钥 |
请求中没有发送API密钥或OAuth访问令牌。 |
2 s290/8 |
不允许IP地址 |
API密钥是有效的,但被配置为仅对来自某些IP地址的请求有效,并且请求发送的IP地址不在允许列表中。 |
2 s290 / B |
无法使用密钥作为URL参数 |
API密钥有效,但未配置为用作URL身份验证,必须在授权标头中使用。 |
3 s290/7 |
无效的\u API\u密钥 |
请求中发送的API密钥无效。 |
2 s290/9 |
无效的语言 |
日志含义请求中发送了X-IPS-Language报头(可用于为响应指定语言ID),但该报头的值无效。 |
3 s290/3 |
无效的应用程序 |
请求发送到的终结点不存在(第一级包含无效字符,只能接受字母数字)。 |
3 s290/4 |
INVALID_CONTROLLER |
请求发送到的终结点不存在(第二级包含无效字符,只能接受字母数字)。 |
2 s290/1 |
无效的应用程序 |
发送请求的端点不存在(第一级不存在)。 |
1 s290/2 |
应用程序被禁用 |
控制请求发送到的端点的应用程序当前被禁用。 |
2 s290/5 |
INVALID_CONTROLLER |
向其发送请求的终结点不存在(第二级不存在)。 |
2 s291/1 |
NO_ENDPOINT |
请求发送到的终结点不存在(URL包含的级别太多)。 |
2 s291/3 |
NO_PERMISSION |
API密钥没有访问请求的终结点的权限。 |
3 s291/2 |
坏法 |
发送请求的端点不存在—HTTP请求方法可能不正确(例如,发送GET而不是POST)。 |
3 s290/9 |
无效的\u访问\u令牌 |
请求中发送的OAuth访问令牌无效。 |
1 s290 / E |
过期的\u访问\u令牌 |
请求中发送的OAuth访问令牌是有效的,但已经过期。 |
3 s290 / B |
无内窥镜 |
OAuth访问令牌未被授权访问任何范围。 |
示例代码
下面是一个简单的代码片段,显示了对/核心/你好
终点。
php communityUrl美元='http://www.example.com/ips4/';$apiKey=“c7a349a1629f02cd2855a58d77646f6d”;美元的旋度=旋度($communityUrl.“api /核心/你好”);curl_setopt_数组(美元的旋度,大堆(CURLOPT_RETURNTRANSFER=>真正的,CURLOPT_HTTPAUTH=>CURLAUTH_BASIC,CURLOPT_USERPWD=>“{$apiKey}:”CURLOPT_USERAGENT=>“MyUserAgent/1.0”));美元的反应=curl_exec(美元的旋度);echo$响应;一个成功的回应应该是这样的:
{“communityName”:“IPS社区套件”,“communityUrl”:“http:\/\/localhost:8888\/ips4\/”,“ipsVersion”:“4.1.6”}