Last updated

Categorize content

A catalog is an important tool to make APIs more discoverable. At full potential, a catalog should include all of your APIs, and be filterable across a variety of categories that users would find useful.

Redocly catalog component can be configured to render a catalog of content based on metadata configurations.

While composing catalogs manually may be a viable approach for small and definitive catalogs, a larger catalog requires some automation to list and classify APIs.

Page types

Redocly automates listing and categorizing by targeting "types" of pages, such as OpenAPI or GraphQL pages. Any type of page can be targeted. Redocly has a flexible system of type definition, so a user can define a type by adding front matter to a Markdown file. Redocly automatically inspects files during a build process and determines its type based on the structure of the contents, the front matter, or an accompanying configuration file.

catalog:
  catalogId:
    items:
      - directory: ./apis
        includeByMetadata:
          type:
            - openapi
            - graphql
            - soap
            - tutorials

To give catalogs more utility, they can be filtered based on a variety of user-defined metadata.

Metadata

While metadata can specify the type of file, it can also specify additional attributes and values used to categorize and classify the data further.

Importance of categorization

Despite its predominance in library systems, Amazon does not use the Dewey Decimal System to organize books. The Dewey Decimal System is a library classification system that assigns a numerical code to each book based on its subject matter. This system is primarily used in physical libraries to help users locate books on shelves.

Amazon, as an online retailer, has a different approach to organizing books. They use a hierarchical categorization system, which sorts books into various categories and subcategories based on genre, subject matter, and other criteria. This system allows users to easily browse and discover books by filtering through categories of interest or using the search function.

While the Dewey Decimal System may serve as a useful framework for organizing physical books in libraries, Amazon's categorization system is better suited for the digital environment, where users can easily search and navigate through vast collections of books.

In a similar way, Redocly has a flexible categorization system which allows definition of metadata on APIs (in x-metadata), or in Markdown front matter, or in the metadata object of the Redocly configuration file.

Priority

In terms of priority, Redocly considers the following list as the order of importance (from most important first):

  • x-metadata
  • Front matter
  • Configuration file

In case of a conflict, the higher priority metadata prevails.

Category governance

Distributed category creation can lead to overlapping categories, or near identical categories which results in confusing results. Instead, categories should be created sparingly. Similarly, values of the categories should be created sparingly too.

Self-categorization of data is important for scalability. Therefore, it must happen in a distributed way across a broader suite of teams. You need a mechanism to enforce a limited number of categories and accepted values in a distributed fashion.

Redocly lint rules can enforce x-metadata usage in APIs and metadata in configuration files with the metadata-schema rule definition.

Define metadata-schema similarly to other lint rules.

The following is an example of metadata-schema defined in redocly.yaml configuration file.

rules:
  metadata-schema:
    type: object
    properties:
      team:
        type: string
        enum:
          - Finance
          - Operations
          - Marketing
          - Product
          - Engineering
        description: Team responsible for the API.

openapi.yaml

info:
  x-metadata:
    team: Finance
    department: Business & Money
    category: Accounting
    subcategory: Managerial Accounting

example.md

---
metadata:
  team: Finance
  department: Business & Money
  category: Accounting
  subcategory: Managerial Accounting
---

# A sample Markdown page

redocly.yaml

metadata:
  team: Finance
  department: Business & Money
  category: Accounting
  subcategory: Management Accounting

Notice in the last file the subcategory was "Management Accounting" instead of "Managerial Accounting" which was a typo on behalf of the distributed team member.

To solve this issue, centralized project setting can restrict the possible set of keys and corresponding values. Additionally, a project should publish these rules to the team of publishers who can adhere to the categories defined by the governing committee.

In some cases, the list of possible values may be limited, such as in the categorization above. In other cases, the list of possible values may be open ended, such as for "author" shown in the next example.

x-metadata:
  team: Finance
  department: Business & Money
  category: Accounting
  subcategory: Managerial Accounting
  author: Karen Berman

Summary

Redocly supports flexible content categorization needs that can:

  • create a catalog
  • filter content in a catalog

At the same time, Redocly supports rigid enforcement of specific category keys and values.