Skip to content
/ shiftapi Public

EXPERIMENTAL: Quickly write RESTful APIs in go with automatic openapi schema generation.

License

Notifications You must be signed in to change notification settings

fcjr/shiftapi

Repository files navigation

ShiftAPI Logo

ShiftAPI

Quickly write RESTful APIs in go with automatic openapi schema generation.

GolangCI Go Report Card

NOTE: THIS IS AN EXPERIMENT

This project is highly experimental -- the API is likely to change (currently only basic post requests are even implemented). This is in no way production ready.

This project was inspired by the simplicity of FastAPI.

Due to limitations of typing in go this library will probably not be production ready pre go 1.18 as handlers must be passed as interface{}s and validated at runtime (Scary I know! 😱). Once generics hit I hope to rewrite the handler implementation to restore compile time type checking & safety.

Installation

go get github.com/fcjr/shiftapi

Usage

package main

import (
	"log"
	"net/http"

	"github.com/fcjr/shiftapi"
)

type Person struct {
	Name string `json:"name"`
}

type Greeting struct {
	Hello string `json:"hello"`
}

// This is your http handler!
// ShiftAPI is responsible for marshalling the request body
//  and marshalling the return value.
func greeter(p *Person) (*Greeting, *shiftapi.Error) {
	return &Greeting{
		Hello: p.Name,
	}, nil
}

func main() {

	api := shiftapi.New(&shiftapi.Params{
		SchemaInfo: &shiftapi.SchemaParams{
			Title: "Greeter Demo API",
		},
	})

	err := api.POST("/greet", greeter, http.StatusOK, &shiftapi.HandlerOpts{
		Summary:     "Greeter Method",
		Description: "It greets you by name.",
	})
	if err != nil {
		log.Fatal(err)
	}

	log.Fatal(api.Serve())
	// redoc will be served at http://localhost:8080/docs
}

About

EXPERIMENTAL: Quickly write RESTful APIs in go with automatic openapi schema generation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages