You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
}

我已经尝试的排查步骤

  1. 系统性测试多个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!");
}
  1. 严格核对请求头格式
    我反复确认请求头完全符合LinkedIn官方文档要求,没有格式错误:
protected $headers = [
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'LinkedIn-Version' => '202505', // 完全符合YYYYMM格式要求
    'X-Restli-Protocol-Version' => '2.0.0'
];
  1. 验证请求体结构合规性
    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'
        ]
    ]
];
  1. 测试其他版本覆盖范围
    我尝试了从202506到202407的多个官方版本,结果Posts API的POST请求全部返回相同的INVALID_VERSION错误。

  2. 确认认证有效性
    同一个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请求上表现完全不一致

我的判断

这个问题大概率是以下情况之一:

  1. Posts API的POST接口版本验证逻辑存在Bug
  2. LinkedIn存在未公开的接口特定版本限制规则
  3. 不同/rest子接口的版本验证逻辑本身就不统一

毕竟202505完全符合错误提示里要求的YYYYMM格式,实在找不到任何格式上的问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:50:27