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:
parent
67c58fdd56
commit
5d6ee506b0
32
private/apigen/api.go
Normal file
32
private/apigen/api.go
Normal 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
|
||||||
|
}
|
56
private/apigen/endpoint.go
Normal file
56
private/apigen/endpoint.go
Normal 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
|
||||||
|
}
|
26
satellite/console/consoleweb/consoleapi/gen/main.go
Normal file
26
satellite/console/consoleweb/consoleapi/gen/main.go
Normal 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{},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user