

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 上游存储库的 API 行为
<a name="upstream-repo-api-behavior"></a>

 当您调用连接到上游存储库的某些 CodeArtifact APIs 存储库时，行为可能会有所不同，具体取决于软件包或包版本存储在目标存储库还是上游存储库中。这里记录了 APIs 它们的行为。

有关的更多信息 CodeArtifact APIs，请参阅 [CodeArtifact API 参考](https://docs.aws.amazon.com/codeartifact/latest/APIReference/Welcome.html)。

如果目标存储库中不存在指定的软件包版本，则大多数 APIs 引用软件包或软件包版本的内容都会返回`ResourceNotFound`错误。即使在上游存储库中存在该程序包或程序包版本，也会返回错误。实际上，在调用上游存储库时，它们会被忽略 APIs。这些 APIs 是：
+ DeletePackageVersions
+ DescribePackageVersion
+ GetPackageVersionAsset
+ GetPackageVersionReadme
+ ListPackages
+ ListPackageVersionAssets
+ ListPackageVersionDependencies
+ ListPackageVersions
+ UpdatePackageVersionsStatus

为了演示这种行为，我们使用两个存储库：`target-repo` 和 `upstream-repo`。`target-repo` 为空存储库且已配置 `upstream-repo` 作为上游存储库。`upstream-repo` 包含 npm 程序包 `lodash`。

当对 `upstream-repo`（包含 `lodash` 程序包）调用 `DescribePackageVersion` API 时，我们会得到以下输出：

```
{
    "packageVersion": {
        "format": "npm",
        "packageName": "lodash",
        "displayName": "lodash",
        "version": "4.17.20",
        "summary": "Lodash modular utilities.",
        "homePage": "https://lodash.com/",
        "sourceCodeRepository": "https://github.com/lodash/lodash.git",
        "publishedTime": "2020-10-14T11:06:10.370000-04:00",
        "licenses": [
            {
                "name": "MIT"
            }
        ],
        "revision": "Ciqe5/9yicvkJT13b5/LdLpCyE6fqA7poa9qp+FilPs=",
        "status": "Published"
    }
```

在对 `target-repo`（该存储库为空但已将 `upstream-repo` 配置为上游存储库）调用相同的 API 时，我们会得到以下输出：

```
An error occurred (ResourceNotFoundException) when calling the DescribePackageVersion operation: 
Package not found in repository. RepoId: {{repo-id}}, Package = PackageCoordinate{packageType=npm, packageName=lodash},
```

 `CopyPackageVersions` API 的行为有所不同。默认情况下，`CopyPackageVersions` API 仅复制存储在目标存储库中的程序包版本。如果程序包版本存储在上游存储库中，但未存储在目标存储库中，则不会复制该版本。要包括仅存储在上游存储库中的程序包的程序包版本，请在 API 请求中将 `includeFromUpstream` 的值设置为 `true`。

有关 `CopyPackageVersions` API 的更多信息，请参阅[在存储库之间复制程序包](copy-package.md)。