Define API URI naming conventions

Created on 3 September 2024, 3 months ago
Updated 5 September 2024, 3 months ago

Problem/Motivation

Our API endpoint URIs are currently ad hoc and inconsistent, e.g., /api/layout/..., /xb-components, and /xb/api/.... We need a stable, predictable convention.

Proposed resolution

Create a convention that observes generally-accepted industry standards and respects Drupal-specific conventions:

REST API Tutorial URI Naming Conventions and Best Practices has a good overview. API Stylebook Design Guidelines links to concrete precedents.

We need to make sure we don't collide or conflict with other common patterns or solutions in Drupal. For example, it would be begging for problems to do anything under /api/, which someone somewhere is surely already using. We should also avoid /xb/ if we're going to use that path for administrative UI routes.

We should also consider any other paths the module uses and make sure all of them make sense together.

<!-- Finally, I think it's worth considering versioning the API, e.g., <code class="language-php">.../v1/...</code>--a common practice. We may conclude it's superfluous, but we should still consider it. -->

I could imagine, for example, something like this:

/xb/api/{resources} [ /{resourceId} [ /{subCollections} [ /{resourceId} ] ] ]
<!--<h3 id="summary-remaining-tasks">Remaining tasks</h3>--><!--<h3 id="summary-api-changes">API changes</h3>--><!--<h3 id="summary-data-model-changes">Data model changes</h3>-->
πŸ“Œ Task
Status

Active

Component

Documentation

Created by

πŸ‡ΊπŸ‡ΈUnited States traviscarden

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @traviscarden
  • πŸ‡ΊπŸ‡ΈUnited States traviscarden
  • πŸ‡ΊπŸ‡ΈUnited States traviscarden
  • πŸ‡§πŸ‡ͺBelgium wim leers Ghent πŸ‡§πŸ‡ͺπŸ‡ͺπŸ‡Ί

    WFM in general, with one exception:

    /xb-api/v1/{resources} [ /{resourceId} [ /{subCollections} [ /{resourceId} ] ] ]

    -1 to versioning the API at this time, because that implies it's a public API. It is not. Defining a public API for this that we provide BC for is definitely not in scope.

    If you really want to have it, then let's use:

    /xb-api/v0/{resources} [ /{resourceId} [ /{subCollections} [ /{resourceId} ] ] ]

    (with v0 matching XB's major version: 0.x)

    P.S.: I do not understand why

    We should also avoid /xb/ if we're going to use that path for administrative UI routes.

    matters? /xb-api/… vs /xb/api/… are essentially the same?

  • πŸ‡ΊπŸ‡ΈUnited States effulgentsia

    Instead of /v0/, perhaps we can make it even clearer that it's an internal API by naming it /internal/?

  • πŸ‡§πŸ‡ͺBelgium wim leers Ghent πŸ‡§πŸ‡ͺπŸ‡ͺπŸ‡Ί

    #5++

  • πŸ‡ΊπŸ‡ΈUnited States traviscarden

    Re: versioning the API, I only proposed it to consider because it's a common industry pattern. If we're not making any stability promises for contrib modules to use it, for example, I see no reason for it. In that case, I don't think we need /internal/ either.

    As to avoiding /xb/, I wanted to prevent "namespace" collisions, since we already have some routes at /xb/. But having considered it a little more, I don't think I'm actually worried about it as long as we don't anticipate wanting to use /xb/api/ for anything else. In fact, there would be a certain elegance in it if we can keep everything under /xb/. Perhaps we could do something like /xb/api/ and /xb/routes/ or similar.

    I'm updating the issue description accordingly.

Production build 0.71.5 2024