_content/security/vuln: replace API docs with v1
Change-Id: I729d5d37acb8c4b62fa57a90b490d4ef0e89be68
Reviewed-on: https://go-review.googlesource.com/c/website/+/485837
Run-TryBot: Tatiana Bradley <tatianabradley@google.com>
Reviewed-by: Tatiana Bradley <tatianabradley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Julie Qiu <julieqiu@google.com>
diff --git a/_content/security/vuln/database.md b/_content/security/vuln/database.md
index 5617a5d..b4e4334 100644
--- a/_content/security/vuln/database.md
+++ b/_content/security/vuln/database.md
@@ -34,37 +34,107 @@
## API
-The vulnerability database is an HTTP server that can respond to GET requests
-for paths specified below.
-The requests have no query parameters, and no specific headers are required,
-so even a site serving from a fixed file system (including a file:// URL)
-can be a vulnerability database.
+The canonical Go vulnerability database, [https://vuln.go.dev](https://vuln.go.dev),
+is an HTTP server that can respond to GET requests for the endpoints specified below.
-By default, govulncheck uses the Go vulnerability database at [vuln.go.dev](https://vuln.go.dev).
+The endpoints have no query parameters, and no specific headers are required.
+Because of this, even a site serving from a fixed file system (including a `file://` URL)
+can implement this API.
+
+Each endpoint returns a JSON-encoded response, in either uncompressed
+(if requested as `.json`) or gzipped form (if requested as `.json.gz`).
+
+The endpoints are:
+
+- `/index/db.json[.gz]`
+
+ Returns metadata about the database:
+
+ ```json
+ {
+ // The latest time the database should be considered
+ // to have been modified, as an RFC3339-formatted UTC
+ // timestamp ending in "Z".
+ "modified": string
+ }
+ ```
+
+ Note that the modified time *should not* be compared to wall clock time,
+ e.g. for purposes of cache invalidation, as there may a delay in making
+ database modifications live.
+
+ See [/index/db.json](https://vuln.go.dev/index/db.json) for a live example.
+
+- `/index/modules.json[.gz]`
+
+ Returns a list containing metadata about each module in the database:
+
+ ```json
+ [ {
+ // The module path.
+ "path": string,
+ // The vulnerabilities that affect this module.
+ "vulns":
+ [ {
+ // The vulnerability ID.
+ "id": string,
+ // The latest time the vulnerability should be considered
+ // to have been modified, as an RFC3339-formatted UTC
+ // timestamp ending in "Z".
+ "modified": string,
+ // (Optional) The module version (in SemVer 2.0.0 format)
+ // that contains the latest fix for the vulnerability.
+ // If unknown or unavailable, this should be omitted.
+ "fixed": string,
+ } ]
+ } ]
+ ```
+
+ See [/index/modules.json](https://vuln.go.dev/index/modules.json) for a live example.
+
+- `/index/vulns.json[.gz]`
+
+ Returns a list containing metadata about each vulnerability in the database:
+
+ ```json
+ [ {
+ // The vulnerability ID.
+ "id": string,
+ // The latest time the vulnerability should be considered
+ // to have been modified, as an RFC3339-formatted UTC
+ // timestamp ending in "Z".
+ "modified": string,
+ // A list of IDs of the same vulnerability in other databases.
+ "aliases": [ string ]
+ } ]
+ ```
+
+ See [/index/vulns.json](https://vuln.go.dev/index/vulns.json) for a live example.
+
+- `/ID/$id.json[.gz]`
+
+ Returns the individual report for the vulnerability with ID `$id`,
+ in OSV format (described below in [Schema](#schema)).
+
+ See [/ID/GO-2022-0191.json](https://vuln.go.dev/ID/GO-2022-0191.json)
+ for a live example.
+
+### Usage in `govulncheck`
+
+By default, `govulncheck` uses the canonical Go vulnerability database at [vuln.go.dev](https://vuln.go.dev).
+
The command can be configured to contact a different vulnerability database using the
GOVULNDB environment variable,
which accepts a vulnerability database URL with protocol `http://`, `https://`, or
`file://`.
-The vulnerability database supports the endpoints listed below. For each path:
+To work correctly with `govulncheck`, the vulnerability database specified must implement the API described above. The `govulncheck` command uses compressed ".json.gz" endpoints when reading from an http(s) source, and the ".json" endpoints when reading from a file source.
-- `$base` is the path portion of a Go vulnerability database URL, by default, "https://vuln.go.dev".
-- `$module` is a module path
-- `$vuln` is a Go vulnerability ID (for example, GO-2021-1234)
+### Legacy API
-To avoid various character set issues, the `$module` element is escaped
-using [module.EscapePath](https://pkg.go.dev/golang.org/x/mod/module#EscapePath).
-
-The endpoints are:
-
-- `$base/index.json`
- A map from module paths to their last modified timestamp ([link](https://vuln.go.dev/index.json)).
-
-- `$base/$module.json`
- A list of all vulnerability reports for the escaped module path `$module` ([example](https://vuln.go.dev/golang.org/x/crypto.json), [escaped example](https://vuln.go.dev/github.com/!robots!and!pencils/go-saml.json)).
-
-- `$base/ID/$vuln.json`
- An individual Go vulnerability report ([example](https://vuln.go.dev/ID/GO-2022-0191.json)).
+The canonical database contains some additional endpoints that are part of a legacy API.
+We plan to remove support for these endpoints soon. If you are relying on the legacy API
+and need additional time to migrate, [please let us know](https://go.dev/s/govulncheck-feedback).
## Schema