Skip to content

go-generalize/api_gen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

api_gen

What's api_gen?

api_gen accelerates the development of API servers.
It generates a boilerplate for your API server in Go and clients in Go, TypeScript and so on.

Server: Go
Client: Go, TypeScript, Dart

Prerequisite

Go 1.16 or newer is required to use mock servers.

Installation

from Releases

Download binaries from Releases.

go install

Go 1.17 or newer is required.

$ go install github.com/go-generalize/api_gen/v2/cmd/api_gen@latest # latest or vX.Y.Z

Basic Usage

Prepare API definitions in Go.
The path of directories are mapped to the path of URLs.

Define types for both of requests and responses.
All types must consist of three parts: method, endpoint name, request or response.
The below example is types for POST /foo/bar/update_user.

Requests are bound with the Binder in echo.
Please refer to Binding. Responses are encoded in JSON.

// ./interfaces/foo/bar/hoge.go
package package_name_that_you_want

type PostUpdateUserRequest struct {
    ID string `json:"id"`
}

type PostUpdateUserResponse struct {
    Result int `json:"result"`
}

Run the below command to generate controllers.

$ api_gen server -o ./server ./interfaces

Controllers are generated into ./interfaces/controller/foo/bar/post_update_user.go.

Then, set up echo server.

// main.go
package main

import (
    controller "path/to/generated/server"
    "github.com/labstack/echo/v4"
)

func main() {
	e := echo.New()
	controller.NewControllers(nil, e)

	panic(e.Start(":8080"))
}

Run the below command to generate clients in TypeScript.

$ api_gen client ts -o ./client/ts ./interfaces

API clients are generated into ./client/ts/api_client.ts.

import { APIClient } from 'path/to/api_client.ts';

const client = new APIClient('very_secure_token', {}, 'https://example.com');

client.foo.bar.postUpdateUser({id: 'id'})
    .then(res => console.log(res));

For more details

server-side

ENGLISH/日本語

client-side

ENGLISH/日本語

For Developers

Development Guide

License

  • Under the MIT License
  • Copyright (c) 2020-2021 go-generalize