Datamuse · API Governance Rules

Datamuse API Rules

Spectral linting rules defining API design standards and conventions for Datamuse.

11 Rules error 5 warn 6
View Rules File View on GitHub

Rule Categories

datamuse

Rules

error
datamuse-operation-id-required
Every operation must have a non-empty operationId.
$.paths[*][get,post,put,patch,delete]
warn
datamuse-operation-id-camel-case
operationId values must be lowerCamelCase.
$.paths[*][get,post,put,patch,delete].operationId
error
datamuse-operation-summary-required
Every operation must have a summary.
$.paths[*][get,post,put,patch,delete]
warn
datamuse-operation-summary-title-case
Operation summaries must use Title Case.
$.paths[*][get,post,put,patch,delete].summary
warn
datamuse-operation-description-required
Every operation must have a description.
$.paths[*][get,post,put,patch,delete]
warn
datamuse-operation-tags-required
Every operation must declare at least one tag.
$.paths[*][get,post,put,patch,delete]
warn
datamuse-query-parameter-naming
Query parameters must be lowercase and use snake_case for compound names (rel_jja, rel_rhy, etc.).
$.paths[*][get].parameters[?(@.in == 'query')].name
error
datamuse-success-response-json
GET operations must return application/json for 200 responses.
$.paths[*][get].responses['200'].content
warn
datamuse-rate-limit-response
GET operations must document a 429 response for the 100k/day rate limit.
$.paths[*][get].responses
error
datamuse-info-version-required
info.version must be declared.
$.info
error
datamuse-server-https-required
All server URLs must use HTTPS.
$.servers[*].url

Spectral Ruleset

Raw ↑
extends:
  - spectral:oas
rules:
  # Every operation must have an operationId
  datamuse-operation-id-required:
    description: Every operation must have a non-empty operationId.
    severity: error
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: operationId
      function: truthy

  datamuse-operation-id-camel-case:
    description: operationId values must be lowerCamelCase.
    severity: warn
    given: $.paths[*][get,post,put,patch,delete].operationId
    then:
      function: pattern
      functionOptions:
        match: "^[a-z][a-zA-Z0-9]+$"

  # Every operation must have a summary in Title Case
  datamuse-operation-summary-required:
    description: Every operation must have a summary.
    severity: error
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: summary
      function: truthy

  datamuse-operation-summary-title-case:
    description: Operation summaries must use Title Case.
    severity: warn
    given: $.paths[*][get,post,put,patch,delete].summary
    then:
      function: pattern
      functionOptions:
        match: "^([A-Z][a-zA-Z0-9]*)( ([A-Z][a-zA-Z0-9]*|of|to|for|in|on|by|the|and|or|a|an))*$"

  # Every operation must have a description
  datamuse-operation-description-required:
    description: Every operation must have a description.
    severity: warn
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: description
      function: truthy

  # Every operation must reference at least one global tag
  datamuse-operation-tags-required:
    description: Every operation must declare at least one tag.
    severity: warn
    given: $.paths[*][get,post,put,patch,delete]
    then:
      field: tags
      function: truthy

  # Datamuse uses lowercase, dotless query parameter names (e.g. ml, sp, rel_jja, qe)
  datamuse-query-parameter-naming:
    description: Query parameters must be lowercase and use snake_case for compound names (rel_jja, rel_rhy, etc.).
    severity: warn
    given: $.paths[*][get].parameters[?(@.in == 'query')].name
    then:
      function: pattern
      functionOptions:
        match: "^[a-z][a-z0-9_]*$"

  # Successful responses must be 200 and return JSON
  datamuse-success-response-json:
    description: GET operations must return application/json for 200 responses.
    severity: error
    given: $.paths[*][get].responses['200'].content
    then:
      field: application/json
      function: truthy

  # Document the 429 response since the free tier enforces 100k/day
  datamuse-rate-limit-response:
    description: GET operations must document a 429 response for the 100k/day rate limit.
    severity: warn
    given: $.paths[*][get].responses
    then:
      field: "429"
      function: truthy

  # info.version must be present
  datamuse-info-version-required:
    description: info.version must be declared.
    severity: error
    given: $.info
    then:
      field: version
      function: truthy

  # Servers must be HTTPS and point to api.datamuse.com
  datamuse-server-https-required:
    description: All server URLs must use HTTPS.
    severity: error
    given: $.servers[*].url
    then:
      function: pattern
      functionOptions:
        match: "^https://"