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