From 4042ab96ed28ad309a585438d2f61272ca0ea61b Mon Sep 17 00:00:00 2001 From: Steven Smith <77019920+stevsmit@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:18:42 -0500 Subject: [PATCH] Adds using quay API docs (#1189) Co-authored-by: Steven Smith --- api/master.adoc | 12 ++- images/application-token.png | Bin 0 -> 35682 bytes modules/configuring-api-calls.adoc | 17 ++++ modules/enabling-using-the-api.adoc | 7 ++ modules/proc_use-api.adoc | 6 -- modules/reassigning-oauth-access-token.adoc | 2 +- modules/using-the-api.adoc | 87 ++++++++++++++++++++ 7 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 images/application-token.png create mode 100644 modules/configuring-api-calls.adoc create mode 100644 modules/enabling-using-the-api.adoc create mode 100644 modules/using-the-api.adoc diff --git a/api/master.adoc b/api/master.adoc index 6b89cdfe..4a619277 100644 --- a/api/master.adoc +++ b/api/master.adoc @@ -42,11 +42,21 @@ include::modules/regenerating-robot-account-token-api.adoc[leveloffset=+2] include::modules/oci-referrers-oauth-access-token.adoc[leveloffset=+1] include::modules/creating-v2-oauth-access-token.adoc[leveloffset=+2] +//how to use the API +include::modules/enabling-using-the-api.adoc[leveloffset=+1] +include::modules/configuring-api-calls.adoc[leveloffset=+2] +include::modules/using-the-api.adoc[leveloffset=+2] + + -//include::modules/proc_use-api.adoc[leveloffset=+1] include::modules/creating-oauth-application-api.adoc[leveloffset=+1] + + +//include::modules/proc_use-api.adoc[leveloffset=+1] + + == {productname} Application Programming Interface (API) [id="ref-api-quay"] diff --git a/images/application-token.png b/images/application-token.png new file mode 100644 index 0000000000000000000000000000000000000000..5acb1c2ce936a1332b50dd1ef2fec454b5b8378e GIT binary patch literal 35682 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 literal 0 HcmV?d00001 diff --git a/modules/configuring-api-calls.adoc b/modules/configuring-api-calls.adoc new file mode 100644 index 00000000..922bfb31 --- /dev/null +++ b/modules/configuring-api-calls.adoc @@ -0,0 +1,17 @@ +[id="configuring-api-calls"] += Configuring {productname} to accept API calls + +Prior to using the {productname} API, you must disable `BROWSER_API_CALLS_XHR_ONLY` in your `config.yaml` file. This allows you to avoid such errors as `API calls must be invoked with an X-Requested-With header if called from a browser`. + +.Procedure + +. In your {productname} `config.yaml` file, set `BROWSER_API_CALLS_XHR_ONLY` to `false`. For example: ++ +[source,yaml] +---- +# ... +BROWSER_API_CALLS_XHR_ONLY: false +# ... +---- + +. Restart your {productname} deployment. \ No newline at end of file diff --git a/modules/enabling-using-the-api.adoc b/modules/enabling-using-the-api.adoc new file mode 100644 index 00000000..bd7b660b --- /dev/null +++ b/modules/enabling-using-the-api.adoc @@ -0,0 +1,7 @@ +:_content-type: REFERENCE +[id="enabling-using-the-api"] += Enabling and using the {productname} API + +By leveraging the {productname} API, you can streamline container registry management, automate tasks, and integrate {productname}'s functionalities into your existing workflow. This can improve efficiency, offer enhanced flexibility (by way of repository management, user management, user permissions, image management, and so on), increase the stability of your organization, repository, or overall deployment, and more. + +The following sections explain how to enable and use the {productname} API. \ No newline at end of file diff --git a/modules/proc_use-api.adoc b/modules/proc_use-api.adoc index fff39585..7d3ecd9a 100644 --- a/modules/proc_use-api.adoc +++ b/modules/proc_use-api.adoc @@ -62,12 +62,6 @@ add the following line to the `config.yaml` on all nodes in the cluster and rest BROWSER_API_CALLS_XHR_ONLY: false ``` -== Accessing the {productname} API from the command line - -You can use the `curl` command to GET, PUT, POST, or DELETE settings via the API -for your {productname} cluster. Replace `` with the OAuth access token you -created earlier to get or change settings in the following examples. - //// === Get superuser information diff --git a/modules/reassigning-oauth-access-token.adoc b/modules/reassigning-oauth-access-token.adoc index 926caa31..c00bf5a5 100644 --- a/modules/reassigning-oauth-access-token.adoc +++ b/modules/reassigning-oauth-access-token.adoc @@ -1,6 +1,6 @@ :_content-type: PROCEDURE [id="reassigning-oauth-access-token"] -== Reassigning an OAuth access token += Reassigning an OAuth access token Organization administrators can assign OAuth API tokens to be created by other user's with specific permissions. This allows the audit logs to be reflected accurately when the token is used by a user that has no organization administrative permissions to create an OAuth API token. diff --git a/modules/using-the-api.adoc b/modules/using-the-api.adoc new file mode 100644 index 00000000..16ea7bf5 --- /dev/null +++ b/modules/using-the-api.adoc @@ -0,0 +1,87 @@ +:_content-type: REFERENCE +[id="using-the-api"] += Using the {productname} API + +After you have created an application and generated an OAuth 2 access token with the desired settings, you can pass in the access token to `GET`, `PUT`, `POST`, or `DELETE` settings by using the API from the CLI. Generally, a {productname} API command looks similar to the following example: + +[source,terminal] +---- +$ curl -X GET -H "Authorization: Bearer " <1> + https:///api/v1/// <2> +---- +<1> The OAuth 2 access token that was generated through the {productname} UI. +<2> The URL of your {productname} deployment and the desired API endpoint. + +All {productname} APIs are documented in the link:https://docs.redhat.com/en/documentation/red_hat_quay/{productname}/html-single/red_hat_quay_api_guide/index#red_hat_quay_application_programming_interface_api[{productname} Application Programming Interface (API)] chapter. Understanding how they are documented is crucial to successful invocation. Take, for example, the following entry for the `createAppToken` API endpoint: + +[source,text] +---- +*createAppToken* <1> +Create a new app specific token for user. <2> + +*POST /api/v1/user/apptoken* <3> + +**Authorizations: **oauth2_implicit (**user:admin**) <4> + + Request body schema (application/json) + +*Path parameters* <5> + +Name: **title** +Description: Friendly name to help identify the token. +Schema: string + +*Responses* <6> + +|HTTP Code|Description |Schema +|201 |Successful creation | +|400 |Bad Request |<<_apierror,ApiError>> +|401 |Session required |<<_apierror,ApiError>> +|403 |Unauthorized access |<<_apierror,ApiError>> +|404 |Not found |<<_apierror,ApiError>> +|=== +---- +<1> The name of the API endpoint. +<2> A brief description of the API endpoint. +<3> The API endpoint used for invocation. +<4> The authorizations required to use the API endpoint. +<5> The available paths to be used with the API endpoint. In this example, `title` is the only path to be used with the `POST /api/v1/user/apptoken` endpoint. +<6> The API responses for this endpoint. + +In order to use an API endpoint, you pass in your access token and then include the appropriate fields depending on your needs. The following procedure shows you how to use the `POST /api/v1/user/apptoken` endpoint. + +.Prerequisites + +* You have access to the {productname} API, which entails having already created an OAuth 2 access token. +* You have set `BROWSER_API_CALLS_XHR_ONLY: false` in your `config.yaml` file. + +.Procedure + +* Create a user application by entering the link:https://docs.redhat.com/en/documentation/red_hat_quay/3.13/html-single/red_hat_quay_api_guide/index#appspecifictokens[`POST /api/v1/user/apptoken`] API call: ++ +[source,terminal] +---- +$ curl -X POST \ + -H "Authorization: Bearer " <1> + -H "Content-Type: application/json" \ + -d '{ + "title": "MyAppToken" <2> + }' \ + "http://quay-server.example.com/api/v1/user/apptoken" <3> +---- +<1> The Oauth access token. +<2> The name of your application token. +<3> The URL of your {productname} deployment appended with the `/api/v1/user/apptoken` endpoint. ++ +.Example output ++ +[source,terminal] +---- +{"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "K2YQB1YO0ABYV5OBUYOMF9MCUABN12Y608Q9RHFXBI8K7IE8TYCI4WEEXSVH1AXWKZCKGUVA57PSA8N48PWED9F27PXATFUVUD9QDNCE9GOT9Q8ACYPIN0HL"}} +---- + +.Verification + +. On the {productname} UI, click your username in the navigation pane -> *Account Settings*. The name of your application appears under the *Docker CLI and other Application Tokens* heading. For example: ++ +image::application-token.png[Application token] \ No newline at end of file