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