AgeChecker.Net · API Governance Rules

AgeChecker.Net API Rules

Spectral linting rules defining API design standards and conventions for AgeChecker.Net.

24 Rules error 14 warn 10
View Rules File View on GitHub

Rule Categories

get info no openapi operation parameter paths response schema security servers

Rules

error
info-title-required
API title must be present
$.info
warn
info-title-company-prefix
API title must start with "AgeChecker.Net"
$.info.title
error
info-description-required
API info must have a description
$.info
error
info-version-required
API version must be present
$.info
error
openapi-version-3
OpenAPI version must be 3.x
$
error
servers-defined
Servers must be defined
$
error
servers-https
All server URLs must use HTTPS
$.servers[*].url
warn
servers-description
Server entries should have descriptions
$.servers[*]
warn
paths-kebab-case
Path segments should use kebab-case
$.paths[*]~
error
paths-no-trailing-slash
Paths must not have trailing slashes
$.paths[*]~
error
operation-summary-required
Every operation must have a summary
$.paths[*][get,post,put,patch,delete]
warn
operation-summary-company-prefix
Operation summaries must start with "AgeChecker.Net"
$.paths[*][get,post,put,patch,delete].summary
warn
operation-description-required
Every operation must have a description
$.paths[*][get,post,put,patch,delete]
error
operation-operationid-required
Every operation must have an operationId
$.paths[*][get,post,put,patch,delete]
warn
operation-operationid-camel-case
OperationIds should use camelCase
$.paths[*][get,post,put,patch,delete].operationId
error
operation-tags-required
Every operation must have at least one tag
$.paths[*][get,post,put,patch,delete]
warn
parameter-description-required
All parameters must have descriptions
$.paths[*][get,post,put,patch,delete].parameters[*]
error
response-description-required
All responses must have descriptions
$.paths[*][get,post,put,patch,delete].responses[*]
warn
response-401-defined
Operations using auth should document 401 responses
$.paths[*][get,post,put,patch,delete].responses
warn
schema-description
Top-level schemas should have descriptions
$.components.schemas[*]
warn
schema-type-defined
Schemas should have a type
$.components.schemas[*]
error
security-schemes-defined
Security schemes must be defined
$.components
error
get-no-request-body
GET operations must not have request bodies
$.paths[*].get
error
no-empty-descriptions
Descriptions must not be empty
$..description

Spectral Ruleset

Raw ↑
rules:

  # INFO / METADATA
  info-title-required:
    description: API title must be present
    severity: error
    given: "$.info"
    then:
      field: title
      function: truthy
  info-title-company-prefix:
    description: API title must start with "AgeChecker.Net"
    severity: warn
    given: "$.info.title"
    then:
      function: pattern
      functionOptions:
        match: "^AgeChecker.Net"
  info-description-required:
    description: API info must have a description
    severity: error
    given: "$.info"
    then:
      field: description
      function: truthy
  info-version-required:
    description: API version must be present
    severity: error
    given: "$.info"
    then:
      field: version
      function: truthy

  # OPENAPI VERSION
  openapi-version-3:
    description: OpenAPI version must be 3.x
    severity: error
    given: "$"
    then:
      field: openapi
      function: pattern
      functionOptions:
        match: "^3\\."

  # SERVERS
  servers-defined:
    description: Servers must be defined
    severity: error
    given: "$"
    then:
      field: servers
      function: truthy
  servers-https:
    description: All server URLs must use HTTPS
    severity: error
    given: "$.servers[*].url"
    then:
      function: pattern
      functionOptions:
        match: "^https://"
  servers-description:
    description: Server entries should have descriptions
    severity: warn
    given: "$.servers[*]"
    then:
      field: description
      function: truthy

  # PATHS
  paths-kebab-case:
    description: Path segments should use kebab-case
    severity: warn
    given: "$.paths[*]~"
    then:
      function: pattern
      functionOptions:
        match: "^(/[a-z0-9{}/_-]+)+$"
  paths-no-trailing-slash:
    description: Paths must not have trailing slashes
    severity: error
    given: "$.paths[*]~"
    then:
      function: pattern
      functionOptions:
        notMatch: "/$"

  # OPERATIONS
  operation-summary-required:
    description: Every operation must have a summary
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: summary
      function: truthy
  operation-summary-company-prefix:
    description: Operation summaries must start with "AgeChecker.Net"
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].summary"
    then:
      function: pattern
      functionOptions:
        match: "^AgeChecker.Net"
  operation-description-required:
    description: Every operation must have a description
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: description
      function: truthy
  operation-operationid-required:
    description: Every operation must have an operationId
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: operationId
      function: truthy
  operation-operationid-camel-case:
    description: OperationIds should use camelCase
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].operationId"
    then:
      function: pattern
      functionOptions:
        match: "^[a-z][a-zA-Z0-9]+$"
  operation-tags-required:
    description: Every operation must have at least one tag
    severity: error
    given: "$.paths[*][get,post,put,patch,delete]"
    then:
      field: tags
      function: truthy

  # PARAMETERS
  parameter-description-required:
    description: All parameters must have descriptions
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].parameters[*]"
    then:
      field: description
      function: truthy

  # RESPONSES
  response-description-required:
    description: All responses must have descriptions
    severity: error
    given: "$.paths[*][get,post,put,patch,delete].responses[*]"
    then:
      field: description
      function: truthy
  response-401-defined:
    description: Operations using auth should document 401 responses
    severity: warn
    given: "$.paths[*][get,post,put,patch,delete].responses"
    then:
      function: schema
      functionOptions:
        schema:
          type: object
          required: ["401"]

  # SCHEMAS
  schema-description:
    description: Top-level schemas should have descriptions
    severity: warn
    given: "$.components.schemas[*]"
    then:
      field: description
      function: truthy
  schema-type-defined:
    description: Schemas should have a type
    severity: warn
    given: "$.components.schemas[*]"
    then:
      field: type
      function: truthy

  # SECURITY
  security-schemes-defined:
    description: Security schemes must be defined
    severity: error
    given: "$.components"
    then:
      field: securitySchemes
      function: truthy

  # HTTP METHOD CONVENTIONS
  get-no-request-body:
    description: GET operations must not have request bodies
    severity: error
    given: "$.paths[*].get"
    then:
      field: requestBody
      function: falsy

  # GENERAL QUALITY
  no-empty-descriptions:
    description: Descriptions must not be empty
    severity: error
    given: "$..description"
    then:
      function: pattern
      functionOptions:
        match: ".+"