All Projects → flowup → Api Client Generator

flowup / Api Client Generator

Licence: mit
Angular REST API client generator from Swagger YAML or JSON file with camel case settigs

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Api Client Generator

Kaizen Openapi Editor
Eclipse Editor for the Swagger-OpenAPI Description Language
Stars: ✭ 97 (+5.43%)
Mutual labels:  rest, swagger, json, yaml
Fastapi
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Stars: ✭ 39,588 (+42930.43%)
Mutual labels:  api, rest, swagger, json
Flask Restplus
Fully featured framework for fast, easy and documented API development with Flask
Stars: ✭ 2,585 (+2709.78%)
Mutual labels:  api, rest, swagger, json
Flask Restx
Fork of Flask-RESTPlus: Fully featured framework for fast, easy and documented API development with Flask
Stars: ✭ 1,050 (+1041.3%)
Mutual labels:  api, rest, swagger, json
Networking
⚡️ Elegantly connect to a REST JSON Api. URLSession + Combine + Decodable + Generics = <3
Stars: ✭ 499 (+442.39%)
Mutual labels:  api, rest, json, httpclient
Just Api
💥 Test REST, GraphQL APIs
Stars: ✭ 768 (+734.78%)
Mutual labels:  api, rest, yaml
Apicache
Simple API-caching middleware for Express/Node.
Stars: ✭ 957 (+940.22%)
Mutual labels:  api, rest, json
Hyperpotamus
🥋 YAML/JSON automation scripting 🤺
Stars: ✭ 38 (-58.7%)
Mutual labels:  rest, json, yaml
Generator Http Fake Backend
Yeoman generator for building a fake backend by providing the content of JSON files or JavaScript objects through configurable routes.
Stars: ✭ 49 (-46.74%)
Mutual labels:  api, rest, json
Swagger Stats
API Observability. Trace API calls and Monitor API performance, health and usage statistics in Node.js Microservices.
Stars: ✭ 559 (+507.61%)
Mutual labels:  api, rest, swagger
Dito
Dito.js is a declarative and modern web framework with a focus on API driven development, based on Objection.js, Koa.js and Vue.js – Released in 2018 under the MIT license, with support by Lineto.com
Stars: ✭ 44 (-52.17%)
Mutual labels:  api, rest, json
Compojure Api
Sweet web apis with Compojure & Swagger
Stars: ✭ 1,056 (+1047.83%)
Mutual labels:  api, rest, swagger
Restclient
🦄 Simple HTTP and REST client for Unity based on Promises, also supports Callbacks! 🎮
Stars: ✭ 675 (+633.7%)
Mutual labels:  rest, json, httpclient
Oas Generator
NodeJS RESTful APIs scaffolding based OpenAPI 3.x specs using oas-tools and express.
Stars: ✭ 32 (-65.22%)
Mutual labels:  api, rest, scaffolding
Spyke
Interact with REST services in an ActiveRecord-like manner
Stars: ✭ 591 (+542.39%)
Mutual labels:  api, rest, json
Ngx Excel Export
Angular6 application with export data to excel file functionality.
Stars: ✭ 58 (-36.96%)
Mutual labels:  json, angular6, ngx
Openapi Generator
OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
Stars: ✭ 10,634 (+11458.7%)
Mutual labels:  api, rest, generator
Rest Hapi
🚀 A RESTful API generator for Node.js
Stars: ✭ 1,102 (+1097.83%)
Mutual labels:  api, rest, swagger
Countries States Cities Database
🌍 World countries, states, regions, provinces, cities, towns in JSON, SQL, XML, PLIST, YAML, and CSV. All Countries, States, Cities with ISO2, ISO3, Country Code, Phone Code, Capital, Native Language, Timezones, Latitude, Longitude, Region, Subregion, Flag Emoji, and Currency. #countries #states #cities
Stars: ✭ 1,130 (+1128.26%)
Mutual labels:  api, json, yaml
Coolie
Coolie(苦力) helps you to create models (& their constructors) from a JSON file.
Stars: ✭ 508 (+452.17%)
Mutual labels:  json, models, generator

npm license npm

Caretaker code style: prettier Conventional Commits Gitter chat

Total alerts Language grade: JavaScript

GitHub stars tweet

API client generator

Angular REST API client generator from Swagger YAML or JSON file with camel case settings

Logo

Description

This package generates an Angular TypeScript class from a Swagger v2.0 specification file. The code is generated using combination of Handlebars templates and in-code template strings.

The generated service class uses new HttpClient module of Angular (introduced in version 4.3).

Motivation

This tool provides an easy and sustainable solution for making the classic REST API feel like you wish it has felt in TypeScript.

It starts by having the same data models at front-end and back-end, then continues with API client interface in form of service build on Angular HTTP client. Everything is typed and described in the way developer don't even need to study the API endpoints.

All you need to set it up is an up to date swagger file and Angular project.

How is this relevant for you?

A lot of developers is struggling with how to properly use the REST API in their apps. In Angular, we have a great opportunity which is HTTP Client supporting types. It is a great experience when you can work on a project where your models and data service are pre-generated, and you can focus on state management, UI and business logic.

Compatibility

This generator focuses on supporting latest Angular/RxJS versions.

  • Angular 9+

  • RxJS 6+ (Observable imports)

    • in case of rxjs <6 please update or rewrite the rxjs imports to match the older version

Older versions

If you need compatibility for Angular 7 and less, It might require some additional steps. In case of problems try editing necessary imports manually or downgrading to older generator versions (4.6.0 and bellow), although it is not recommended as patches and fixes might not be present in older versions.

See the Changelog to keep up with the features and changes.

Usage

This command will generate API client described in the swagger.json file to the ./output folder.

npx api-client-generator -s ./path/to/swagger.json -o ./output

This command will do the same, but it will split all of the tags to separate API services and models folder will be shared. All will be generated to specified path and that is ./src/api folder.

npx api-client-generator -t all -s ./path/to/swagger.yaml -o ./src/api

Script in Package JSON

npm install api-client-generator --save-dev

  • for quick usage create run script in your package.json scripts.
"scripts": {
  "generate-api-client": "api-client-generator -s ./swagger.yaml -o ./output-folder"
},

Recommended:

  • use a "tag" (-t all) option to generate all (or list of specific) services separately
"scripts": {
  "generate-api-client": "api-client-generator -s ./swagger.yaml -o ./output-folder -t all"
},
  • then just run

npm run generate-api-client

In case you want to use swagger fie from a remote source, you can use curl (or simillar tool to fetch the file) and run the generator, as shown in the examples bellow.

curl https://raw.githubusercontent.com/flowup/api-client-generator/master/tests/custom/swagger.yaml -o swagger.yaml &&npm run generate-api-client

Or directly run via npx

curl https://raw.githubusercontent.com/flowup/api-client-generator/master/tests/custom/swagger.yaml -o swagger.yaml &&npx api-client-generator -t all -s ./path/to/swagger.yaml -o ./src/api

This will download and save the swagger.yaml, and later on use the file to generate API client.

NOTE: if you want to skip the installation for project, you can use npx but be careful as you'll be using the latest version every time you run the script (We use SEMVER so it is safer to update over the time).

Options

Option Description
-h/--help print help and exit
-s/--source path to the swagger file (YAML or JSON)
-o/--output path where the generated files should be emitted
-C/--commit git commit generated changes *
-v/--verbose supply stack traces with outputted error messages
-t/--splitPathTags generate services to separate modules
specify what particular tags should be generated. Use , as the separator for multiple tags
use all to emit all as a service per tag
-m/--skipModule skip creating the index file with module export
-g/--skipGuards skip creating type guards and guarded service

* The author of the commit will be api-client-generator <[email protected]>. If there are any staged changes in your repository, the generator will halt pre-generation with an error to prevent including your changes in the automatic commit.*

How to use generated client

  1. import the APIClientModule in your app.module.ts (main module)
  • domain and configuration should be passed to module imports using .forRoot method
  • options and domain are optional
  • when a domain is not passed, host property form swagger file is used as a default
    • if host property is not defined window.href with a current port is used instead
@NgModule({
  imports: [
    /* Default configuration and all of it's properties is optional */
    APIClientModule.forRoot({
      domain: 'https://api.url', // or use value defined in environment `environment.apiUrl`
      httpOptions: {
        headers: {
          myCustomHeader:
            'this will appear in every request as one of the headers',
        },
        params: { someParam: 'customParam' },
      },
    }),
    /* ... other imports */
    HttpClientModule, // <<= this is very important import
    // API client relies on HttpClient module and will throw and provider error if not there
  ],
  /* ... other stuff */
})
export class AppModule {}
  1. use APIClient service in your components/services/...
@Component({
  selector: 'my-component',
  templateUrl: `
    <div *ngFor="let user of users">
      <p>User name: {{user.name}}</p>
    </div>
  `,
})
export class MyComponent {
  users: User[] = [];

  constructor(private readonly api: APIClient) {
    this.api.getUsers().subscribe(users => (this.users = users));
  }
}

Generated structure

  • if you are interested in how will the generated client with models look like, take a look in an example/ folder
output
 ├─ guards
 │   └─ index.ts
 ├─ models
 │   ├─ some.enum.ts
 │   ├─ some.model.ts
 │   │  ...
 │   ├─ another.model.ts
 │   └─ index.ts
 ├─ api-client.interface.ts
 ├─ api-client.service.ts
 └─ index.ts

Common problems

HttpClient not provided

This or very similar error means that you forgot to import HttpClientModule in your root module

StaticInjectorError(AppModule)[APIClient -> HttpClient]:
  StaticInjectorError(Platform: core)[APIClient -> HttpClient]:
    NullInjectorError: No provider for HttpClient!

Fix:

  • add HttpClientModule to your root module (see NgModule imports in usage)

Numeric Enums keys generated as plane number

If some of your numeric enums look like this, the problem might be that in the swagger file you are not describing the keys properly.

export enum MyEnum {
  0 = 0,
  1 = 1,
  2 = 2,
}

Fix We currently support two options:

  • formatting description into an array of ['1 Foo', '2 Bar']
  • using 'x-enumNames' custom property that should be in format ['Foo', 'Bar']

Problem reporting and contributions

Please report any problems you have any issues you find, so they can be resolved. If the generator terminates with an error message, please re-run it with the -v flag and post the outputted stack trace.

Feel free to discuss desired improvements or functionality in issues. Afterwards, the pull requests are very welcome.

Development

If you are interested in contributing please follow these steps:

  1. Create the issue and discuss the problem
  2. Fork the repo
  3. Run npm run dev:install instead of npm install to install all (even test) dependencies
  4. Add your feature/fix
    • follow the code style
    • check for the lint errors
    • in case of questions visit gitter to chat with contributors
  5. Run the tests npm run tests
  6. Open the PR to upstream master
    • mention the issue/bug/feature it solves/closes

.

.

.

.

Inspired by swagger-js-codegen

Generator based on angular4-swagger-client-generator

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].