LinkedIn REST API版本验证不一致:Images API支持202505但Posts API POST请求返回INVALID_VERSION错误
LinkedIn REST API版本验证不一致:Images API支持202505但Posts API POST请求返回INVALID_VERSION错误
我最近在对接LinkedIn REST API时遇到了一个非常诡异的版本验证不一致问题:同样的LinkedIn-Version: 202505在Images API上能正常工作,但在Posts API的POST请求里却直接返回INVALID_VERSION错误,明明用的是完全相同的请求头和认证信息,这完全不符合官方文档里的统一版本规则。
环境信息
- API基础URL:
https://api.linkedin.com/rest - 开发框架:Laravel HTTP Client(PHP)
- 认证:有效的OAuth Token,已包含
w_organization_social必要权限
具体请求对比
✅ 正常工作 - Images API
请求详情:
POST /rest/images?action=initializeUpload LinkedIn-Version: 202505 X-Restli-Protocol-Version: 2.0.0
响应结果:200 OK
❌ 请求失败 - Posts API
请求详情:
POST /rest/posts LinkedIn-Version: 202505 X-Restli-Protocol-Version: 2.0.0
响应结果:
400 Bad Request { "code": "INVALID_VERSION", "message": "API versions should have date format as YYYYMM or YYYYMM.RR where RR is the revision" }
我已经尝试的排查步骤
- 系统性测试多个API版本
我写了一个批量测试函数,验证不同版本在Posts API上的有效性,结果发现了更奇怪的现象:GET请求用202505能正常返回,但POST请求用同一个版本就报错。测试代码如下:
public function testValidVersions() { $versionsToTest = [ '202506', // 文档标注的最新版本 '202505', // 官方声明支持的版本 '202504', '202503', '202502', '202412', '202411', '202410', '202409', '202408', '202407', ]; foreach ($versionsToTest as $version) { $this->headers['LinkedIn-Version'] = $version; // 测试Posts API的GET请求 $response = $this->apiClientHttp ->withToken($this->companyNetwork->access_token) ->withHeaders($this->headers) ->get('/posts?author=urn:li:organization:XXXXXXX'); $body = $response->body(); if ($response->successful() || !str_contains($body, 'INVALID_VERSION')) { Log::info("✅ Version {$version} WORKS for /posts!"); return $version; } else { Log::warning("❌ Version {$version} failed for /posts: " . $body); } } throw new \Exception("No valid version found for /posts!"); }
- 严格核对请求头格式
我反复确认请求头完全符合LinkedIn官方文档要求,没有格式错误:
protected $headers = [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'LinkedIn-Version' => '202505', // 完全符合YYYYMM格式要求 'X-Restli-Protocol-Version' => '2.0.0' ];
- 验证请求体结构合规性
Posts API的请求体完全照搬官方示例结构,没有语法或字段错误:
$payload = [ 'author' => 'urn:li:organization:XXXXXX', 'commentary' => 'Test post content', 'visibility' => 'PUBLIC', 'distribution' => [ 'feedDistribution' => 'MAIN_FEED', 'targetEntities' => [], 'thirdPartyDistributionChannels' => [] ], 'lifecycleState' => 'PUBLISHED', 'isReshareDisabledByAuthor' => false, 'content' => [ 'media' => [ 'id' => 'urn:li:image:D4D10AQGeOTx9b8Cx0g' ] ] ];
测试其他版本覆盖范围
我尝试了从202506到202407的多个官方版本,结果Posts API的POST请求全部返回相同的INVALID_VERSION错误。确认认证有效性
同一个OAuth Token可以正常调用Images API、Posts API的GET接口等其他LinkedIn服务,排除了权限不足、Token过期等认证类问题。
预期与实际的矛盾点
根据LinkedIn REST API官方文档:
202505是全/rest系列接口都应当支持的有效版本- 相同的请求头参数在所有同系列接口上的表现应当一致
YYYYMM格式(如202505)是明确被允许的版本格式
但实际表现完全背离预期:
- Images API完全接受
202505并正常响应 - Posts API的POST请求直接拒绝该版本,返回格式错误提示
- 同一个版本在Posts API的GET和POST请求上表现完全不一致
我的判断
这个问题大概率是以下情况之一:
- Posts API的POST接口版本验证逻辑存在Bug
- LinkedIn存在未公开的接口特定版本限制规则
- 不同
/rest子接口的版本验证逻辑本身就不统一
毕竟202505完全符合错误提示里要求的YYYYMM格式,实在找不到任何格式上的问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

