Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork77
Transforms a Hydra API doc in an intermediate representation that can be used for various tasks such as creating smart API clients, scaffolding code or building administration interfaces.
License
api-platform/api-doc-parser
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Effortlessly turn Hydra, Swagger/OpenAPI, and GraphQL specs into actionable data for your tools and apps.
api-doc-parser is a standalone TypeScript library that parsesHydra,Swagger,OpenAPI, andGraphQL documentation into a unified, intermediate representation.
This normalized structure enables smart API clients, code generators, admin interfaces, and more.
It integrates seamlessly with theAPI Platform framework.
- Unified output – one normalized
Apiobject covering resources, fields, operations, parameters, and relations - TypeScript-first – strict typings for every parsed element
- Embedded & referenced resources resolved automatically
- Framework integration – easily integrates with the API Platform ecosystem
- Supports all major API formats – Hydra, Swagger/OpenAPI v2, OpenAPI v3, and GraphQL
UsingNPM:
npm install @api-platform/api-doc-parserUsingPnpm:
pnpm add @api-platform/api-doc-parserWithYarn:
yarn add @api-platform/api-doc-parserUsingBun:
bun add @api-platform/api-doc-parserHydra
import{parseHydraDocumentation}from"@api-platform/api-doc-parser";const{ api, response, status}=awaitparseHydraDocumentation("https://demo.api-platform.com",);
OpenAPI v2 (formerly known as Swagger)
import{parseSwaggerDocumentation}from"@api-platform/api-doc-parser";const{ api, response, status}=awaitparseSwaggerDocumentation("https://demo.api-platform.com/docs.json",);
OpenAPI v3
import{parseOpenApi3Documentation}from"@api-platform/api-doc-parser";const{ api, response, status}=awaitparseOpenApi3Documentation("https://demo.api-platform.com/docs.jsonopenapi?spec_version=3.0.0",);
GraphQL
import{parseGraphQl}from"@api-platform/api-doc-parser";const{ api, response}=awaitparseGraphQl("https://demo.api-platform.com/graphql",);
Each parse function returns a Promise that resolves to an object containing the normalized API structure, the raw documentation, and the HTTP status code:
functionparseOpenApi3Documentation(entrypointUrl:string,options?:RequestInitExtended,):Promise<{api:Api;response:OpenAPIV3.Document;status:number;}>;
functionparseSwaggerDocumentation(entrypointUrl:string):Promise<{api:Api;response:OpenAPIV2.Document;status:number;}>;
functionparseHydraDocumentation(entrypointUrl:string,options?:RequestInitExtended,):Promise<{api:Api;response:Response;status:number;}>;
functionparseGraphQl(entrypointUrl:string,options?:RequestInit,):Promise<{api:Api;response:Response;}>;
Represents the root of the parsed API, containing the entrypoint URL, an optional title, and a list of resources.
interfaceApi{entrypoint:string;title?:string;resources?:Resource[];}
Describes an API resource (such as an entity or collection), including its fields, operations, and metadata.
interfaceResource{name:string|null;url:string|null;id?:string|null;title?:string|null;description?:string|null;deprecated?:boolean|null;fields?:Field[]|null;readableFields?:Field[]|null;writableFields?:Field[]|null;parameters?:Parameter[]|null;getParameters?:()=>Promise<Parameter[]>|null;operations?:Operation[]|null;}
Represents a property of a resource, including its type, constraints, and metadata.
interfaceField{name:string|null;id?:string|null;range?:string|null;type?:FieldType|null;arrayType?:FieldType|null;enum?:{[key:string|number]:string|number}|null;reference?:string|Resource|null;embedded?:Resource|null;required?:boolean|null;nullable?:boolean|null;description?:string|null;maxCardinality?:number|null;deprecated?:boolean|null;}
Represents a query parameter for a collection/list operation, such as a filter or pagination variable.
interfaceParameter{variable:string;range:string|null;required:boolean;description:string;deprecated?:boolean;}
Enumerates the possible types for a field, such as string, integer, date, etc.
typeFieldType=|"string"|"integer"|"negativeInteger"|"nonNegativeInteger"|"positiveInteger"|"nonPositiveInteger"|"number"|"decimal"|"double"|"float"|"boolean"|"date"|"dateTime"|"duration"|"time"|"byte"|"binary"|"hexBinary"|"base64Binary"|"array"|"object"|"email"|"url"|"uuid"|"password"|string;
Represents an operation (such as GET, POST, PUT, PATCH, DELETE) that can be performed on a resource.
interfaceOperation{name:string|null;type:"show"|"edit"|"delete"|"list"|"create"|null;method?:string|null;expects?:any|null;returns?:string|null;types?:string[]|null;deprecated?:boolean|null;}
api-doc-parser applies a predictable set of rules when interpreting an OpenAPI document.
If a rule is not met, the resource concerned is silently skipped.
| Rule | Details |
|---|---|
| Single-item path pattern | AGET (read) orPUT/PATCH (update) endpointmust match:/books/{id} (regex ^[^{}]+/{[^{}]+}/?$).books may be singular (/book/{id}). |
| Schema discovery | GET → first searchesresponses → 200 → content → application/json; if missing, falls back tocomponents (component name must be singular, e.g.Book).PUT/PATCH → only requestBody → content → application/json is considered.If both GET & PUT/PATCH schemas exist, their fields aremerged. |
| Collection paths | A create (POST) or list (GET) endpointmust be plural:/books. |
| Deletion path | DELETE must live under the single-item GET path (/books/{id}). |
| Relations & Embeddeds | Links between resources are inferred from property names and their JSON schema: •Plural object/array properties (e.g. reviews,authors) becomeembedded resources when their item schema matches an existing resource (Review,Author).•ID-like properties (e.g. review_id,reviewId,review_ids,reviewIds,authorId) are treated asreferences to that resource.• As a result, fields such as reviews (object/array) andreview_ids (scalar/array of IDs) each point to thesameReview resource, one flaggedembedded, the otherreference. |
| Parameter extraction | Parameters are readonly from the list path (/books). |
API Doc Parser is designed to parse any API documentation format and convert it in the same intermediate representation.If you develop a parser for another format, pleaseopen a Pull Requestto include it in the library.
Contributions are welcome! To contribute:
Read ourCode of Conduct.
Fork the repository and create a feature branch.
Ensure you have thelatest version ofpnpm installed.
Install dependencies
pnpm install
Adhere to the code style and lint rules
pnpm lint:fix
pnpm format
Run tests
pnpmtestEnsure type correctness
pnpm typecheck
Submit a pull request with a clear description of your changes.
Created byKévin Dunglas. Sponsored byLes-Tilleuls.coop.
This project is licensed under the MIT License - see theLICENSE file for details.
About
Transforms a Hydra API doc in an intermediate representation that can be used for various tasks such as creating smart API clients, scaffolding code or building administration interfaces.
Topics
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
