API Design tip: use objects for similar data

Featured image for sharing metadata for article

Let's say you're building an API, be it RESTful or GraphQL, and you want to provide a few bits of similar data. Or maybe you've only got one piece of data (i.e an external identifier, but you rightfully so are thinking about future-proofing your API.

For instance, if we're building a Pipeline service, that executes CI/CD pipelines, we may initially reach for the following setup:

{
  "pipeline_id": "123",
  "namespace_id": "...",
  "namespace_path": "...",
  "project_id": "...",
  "project_path": "...",
  "user_id": "...",
  "user_login": "...",
  "user_email": "..."
}

Instead, it's better to wrap this into a specific object, such as:

{
  "pipeline_id": "123",
  "namespace": {
    "id": "...",
    "path": "..."
  },
  "project": {
    "id": "...",
    "path": "..."
  },
  "user": {
    "id": "...",
    "login": "...",
    "email": "..."
  }
}

This gives us an easier structure, which is easier to visually parse, and keeps similar data together. Instead of doing this later - as a breaking change - we can design it up front, and it works nicely.

It also can highlight where data is not owned by the service, as it's not top-level.

Written by Jamie Tanna's profile image Jamie Tanna on , and last updated on .

Content for this article is shared under the terms of the Creative Commons Attribution Non Commercial Share Alike 4.0 International, and code is shared under the Apache License 2.0.

#api.

Also on:

This post was filed under articles.

Interactions with this post

Interactions with this post

Below you can find the interactions that this page has had using WebMention.

Have you written a response to this post? Let me know the URL:

Do you not have a website set up with WebMention capabilities? You can use Comment Parade.