private/apigen: initial typings and methods

Initial typings and methods for the future API Management implementation.
Blueprint - https://review.dev.storj.io/c/storj/storj/+/6341

Change-Id: I9afe66a7610a3a80e764b317ddd211f125b1ea43
This commit is contained in:
Vitalii Shpital 2021-12-10 19:15:33 +02:00
parent 67c58fdd56
commit 5d6ee506b0
3 changed files with 114 additions and 0 deletions

32
private/apigen/api.go Normal file
View File

@ -0,0 +1,32 @@
// Copyright (C) 2022 Storj Labs, Inc.
// See LICENSE for copying information.
package apigen
// API represents specific API's configuration.
type API struct {
Version string
Description string
EndpointGroups []*EndpointGroup
}
// New creates new API with specific configuration.
func New(version, description string) *API {
return &API{
Version: version,
Description: description,
}
}
// Group adds new endpoints group to API.
func (a *API) Group(name, prefix string) *EndpointGroup {
group := &EndpointGroup{
Name: name,
Prefix: prefix,
Endpoints: make(map[PathMethod]*Endpoint),
}
a.EndpointGroups = append(a.EndpointGroups, group)
return group
}

View File

@ -0,0 +1,56 @@
// Copyright (C) 2022 Storj Labs, Inc.
// See LICENSE for copying information.
package apigen
import "net/http"
// Endpoint represents endpoint's configuration.
type Endpoint struct {
Name string
Description string
MethodName string
NoCookieAuth bool
NoAPIAuth bool
Request interface{}
Response interface{}
Params []string
}
// CookieAuth returns endpoint's cookie auth status.
func (e *Endpoint) CookieAuth() bool {
return !e.NoCookieAuth
}
// APIAuth returns endpoint's API auth status.
func (e *Endpoint) APIAuth() bool {
return !e.NoAPIAuth
}
// PathMethod represents endpoint's path and method type.
type PathMethod struct {
Path string
Method string
}
// EndpointGroup represents endpoints group.
type EndpointGroup struct {
Name string
Prefix string
Endpoints map[PathMethod]*Endpoint
}
// Get adds new GET endpoint to endpoints group.
func (eg *EndpointGroup) Get(path string, endpoint *Endpoint) {
eg.addEndpoint(path, http.MethodGet, endpoint)
}
// addEndpoint adds new endpoint to endpoints list.
func (eg *EndpointGroup) addEndpoint(path, method string, endpoint *Endpoint) {
pathMethod := PathMethod{
Path: path,
Method: method,
}
eg.Endpoints[pathMethod] = endpoint
}

View File

@ -0,0 +1,26 @@
// Copyright (C) 2022 Storj Labs, Inc.
// See LICENSE for copying information.
package main
//go:generate go run ./
import (
"storj.io/storj/private/apigen"
"storj.io/storj/satellite/console"
)
func main() {
api := apigen.New("v1", "")
{
g := api.Group("Projects", "projects")
g.Get("/", &apigen.Endpoint{
Name: "List Projects",
Description: "Lists all projects user has",
MethodName: "ListUserProjects",
Response: []console.Project{},
})
}
}