Skip to content

Latest commit

 

History

History
89 lines (61 loc) · 2.26 KB

README.md

File metadata and controls

89 lines (61 loc) · 2.26 KB

openapi-diff-node

A tool for diffing two openapi-compatible api schema.

Goal

  • To quickly and easily find out the differences between the two openapi schemas.
  • To filter out unnecessary information from overly complicated schema.

No-Goal

  • Display an exhaustive list of all details of every endpoint in openapi schema.

Usage

  • We assume all request and response bodies are in application/json format.
  • Error responses are not supported. For response bodies, a response of status code 200 will be used first, then 201. If no responses are of status code 200 or 201, response object will simply be an empty object.

import { openapiDiff } from 'opeanpi-diff-node';

const diff: DiffOutputItem = openapiDiff(oldOpenapiSchema, newOpenapiSchema);

console.log(diff);
  • see following interfaces for the type of the result
export interface DiffOutputItem {
  path: string; // path of the endpoint
  method: ApiHttpMethod; // http method of the endpoint
  queryParams: QueryParam[]; // changes in query string parameters
  requestBody: RequestBody[]; // changes in http request body (application/json)
  responseBody: ResponseBody[]; // changes in http response body (application/json)
  status: ApiStatus;
}

interface QueryParam extends CommonEndpointInfo {}
interface RequestBody extends ObjectSchemaBase {}
interface ResponseBody extends ObjectSchemaBase {}

interface ObjectSchemaBase extends CommonEndpointInfo {}

interface CommonEndpointInfo extends FlattenedCommonEndpointInfo, DiffInfo {}

interface DiffInfo {
  status: ApiStatus;
  modifiedFields: string[];
}

type ApiStatus = 'REMOVED' | 'MODIFIED' | 'ADDED' | 'UNCHANGED';

export interface FlattenedCommonEndpointInfo {
  name: string;
  description: string;
  required: boolean;
  type: string;
}

Starting Development Server

  • make a directory of src/__local__/examples and place two files. This directory is git-ignored.
    • openapi-old.json : an old openapi schema file.
    • openapi-new.json : a new openapi schema file.
npm install
npm run dev
  • Hot reload is fully supported. See console for the result of the diff.

Building for Production

npm run build

Checking Types

npm run check:types

(tsc will be added as a DevDependency in the future)