rest

package module
v2.0.44 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 27, 2023 License: MIT Imports: 17 Imported by: 1

README

RESTfull support

Documentation

Overview

Обработка прикладных HTTP запросов

Описание структур для API и инициализация

Описание структур для API и инициализация

Index

Constants

View Source
const (
	FlagLogUnknownParams   = 0x00000001 // Логировать полученные query параметры, которые не описаны в методе
	FlagConvertReplyToJSON = 0x00000008 // Конвертировать ответ в json? Если он будет заранее подготовлен уже в таком формате, то НЕ СТАВИТЬ этот флаг!

	StatusProcessed = 999 // Специальный тип возврата, говорящий о том, что уже все ответы отправлены

	// Использовать по возможности стандартные имена!
	ParamCount      = "count"
	ParamPeriodFrom = "from" // включая
	ParamPeriodTo   = "to"   // НЕ включая
	ParamIDs        = "ids"
	ParamNames      = "names"

	// Стандартные Scope цепочек разбора пути, они же и суффиксы именён запросов в базу
	ScopeSelectAll     = "select.all"
	ScopeSelectID      = "select.id"
	ScopeSelectGUID    = "select.guid"
	ScopeSelectName    = "select.name"
	ScopeSelectPattern = "select.pattern"
	ScopeSelectStatus  = "select.status"
	ScopeInsert        = "insert"
	ScopeUpdateID      = "update.id"
	ScopeUpdateGUID    = "update.guid"
	ScopeUpdateName    = "update.name"
	ScopeDeleteID      = "delete.id"
	ScopeDeleteGUID    = "delete.guid"
	ScopeDeleteName    = "delete.name"

	// Признак статуса
	StatusActive   = "active"
	StatusInactive = "inactive"

	ExprID      = "id"
	ExprGUID    = "guid"
	ExprName    = "name"
	ExprPattern = "pattern"

	// Стандартные регулярки для Expr
	REempty  = ``
	REany    = `.+`
	REid     = `\d+`
	REstatus = StatusActive + "|" + StatusInactive
	REguid   = `(?i)([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})`

	ExecResultName = "execResult"

	DefaultMaxCount  = 10000
	DefaultMaxPeriod = config.Duration(3600 * time.Second)

	StatusRetry = 999 // Специальный http status, возвращаемый из After для повторного выполнения GET запроса (с возможно измененными там параметрами)
)

Variables

View Source
var (
	Log = log.NewFacility("api") // Log facility

)

Functions

func AddTag added in v2.0.18

func AddTag(tag *Tag) error

func BadRequest

func BadRequest(msg string, v ...any) (code int, err error)

func CheckPeriod

func CheckPeriod(from time.Time, to time.Time, maxPeriod time.Duration, stdPeriod time.Duration) (normFrom time.Time, normTo time.Time, code int, err error)

func Enumerate

func Enumerate(e Enumerator) (err error)

func FindSubstArg added in v2.0.27

func FindSubstArg(vars []any, name string) (subst *db.SubstArg)

func GetTagName added in v2.0.18

func GetTagName(name string) string

func Handler

func Handler(h *stdhttp.HTTP, id uint64, prefix string, urlPath string, w http.ResponseWriter, r *http.Request) (basePath string, processed bool)

Обработчик прикладных HTTP запросов

func HandlerEx added in v2.0.42

func HandlerEx(find FindModule, extra any, h *stdhttp.HTTP, id uint64, prefix string, urlPath string, w http.ResponseWriter, r *http.Request) (basePath string, processed bool)

func Init

func Init(cfg any, hh *stdhttp.HTTP, basePath string, defaultDB string, extraConfigs misc.InterfaceMap) (err error)

func InternalServerError

func InternalServerError(msg string, v ...any) (code int, err error)

func ModuleRegistration

func ModuleRegistration(handler API) (err error)

func NotAllowed

func NotAllowed(msg string, v ...any) (code int, err error)

func NotFound

func NotFound(msg string, v ...any) (code int, err error)

func NotImplemented

func NotImplemented(msg string, v ...any) (code int, err error)

func ParseTime

func ParseTime(s string) (t time.Time, err error)

Преобразовать строку во время

func RemoveModuleRegistration added in v2.0.11

func RemoveModuleRegistration(handler API) (err error)

func Start

func Start() (err error)

Types

type API

type API interface {
	// Получение информации о методе
	Info() *Info

	// Вызывается перед обращением к базе, используется, например, для добавления дополнительных параметров или проверок
	// Если возвращает code != 0 или result != nil, то они и будут результатом
	// Если code<0, то result содержит готовый ответ в []byte, отсылаем как есть с кодом -code
	Before(proc *ProcOptions) (result any, code int, err error)

	// Вызывается почле обращения к базе, используется, например, для обогащения результата
	// Если возвращает code != 0 или result != nil, то они и будут результатом
	// Если code<0, то result содержит готовый ответ в []byte, отсылаем как есть с кодом -code
	After(proc *ProcOptions) (result any, code int, err error)
}

Интерфейс API метода

type Enumerator

type Enumerator func(path string, info *Info) (err error)

type ExecResult

type ExecResult struct {
	AffectedRows uint64          `json:"affectedRows,omitempty" comment:"Количеcтво затронутых записей"`
	Rows         []ExecResultRow `json:"rows,omitempty" comment:"Созданные записи"`
	Notice       string          `json:"notice,omitempty" comment:"Предупреждения и замечания"`
}

type ExecResultRow added in v2.0.17

type ExecResultRow struct {
	ID   uint64 `json:"id,omitempty" comment:"ID созданной записи"`
	GUID string `json:"guid,omitempty" comment:"GUID созданной записи"`
}

type ExternalDocs added in v2.0.18

type ExternalDocs struct {
	Description string
	URL         string
}

type FieldDef

type FieldDef struct {
	JSONname string
	DBname   string
	Type     reflect.Kind
}

type FindModule added in v2.0.42

type FindModule func(path string) (module *Module, basePath string, extraPath []string, found bool)

type FuncAfter

type FuncAfter func(proc *ProcOptions) (result any, code int, err error)

type FuncBefore

type FuncBefore func(proc *ProcOptions) (result any, code int, err error)

type FuncInit

type FuncInit func(info *Info) (err error)

type Info

type Info struct {
	Path          string        // Относительный (от базового) путь в URL
	Name          string        // Имя, желательно  чтобы по правилам имен переменных
	Summary       string        // Краткое описание
	Description   string        // Описание, по умолчанию сформированное из Summary и query параметров
	Tags          []string      // Имена тегов для группировки
	Flags         path.Flags    // Флаги
	Methods       *path.Set     // Цепочки обработки
	Config        any           // Кастомные параметры в конфиг файле
	CacheLifetime time.Duration // Время жизни кэша, если 0, то не использовать
	DBtype        string        // Тип базы. Если пусто, то по умолчанию из конфига
	QueryPrefix   string        // Префикс имени запроса в базу
	Init          FuncInit      // User defined Init
	Before        FuncBefore    // User defined Before query
	After         FuncAfter     // User defined After query
}

Информация о методе

type Module added in v2.0.42

type Module struct {
	RawURL      string
	RelativeURL string        // URL без учета базовой части
	Handler     API           // Интерфейс метода
	Info        *Info         // Информация о методе
	LogFacility *log.Facility // Log facility
}

Обработчик

type ProcOptions

type ProcOptions struct {
	LogFacility      *log.Facility       // Предпочтительная facility для логирования
	H                *stdhttp.HTTP       // HTTP листенер
	LogSrc           string              // Строка с ID запроса для MessageWithSource
	Info             *Info               // Информация о методе
	ID               uint64              // ID запроса
	Prefix           string              // Префикс пути запроса (при работе через прокси)
	Path             string              // Путь запроса
	Tail             []string            // Остаток пути
	R                *http.Request       // Запрос
	W                http.ResponseWriter // Интерфейс для ответа
	Chain            *path.Chain         // Обрабатываемая цепочка
	ChainParentLocal path.Chains         // Копия Chain.Parent для возможности ее модификации для работы с динамическими объектами. Рекомендуется использовать её, а не Chain.Parent
	Scope            string              // Обрабатываемый Scope
	RawBody          []byte              // Тело запроса. В R.Body уже nil!
	PathParams       any                 // Path параметры
	QueryParams      any                 // Query параметры
	RequestParams    any                 // Request параметры
	DBqueryName      string              // Имя запроса к базе данных
	DBqueryVars      []any               // Переменные для формирования запроса
	DBqueryResult    any                 // Результат выполненения запроса (слайс)
	Fields           []misc.InterfaceMap // Поля (имя из sql запроса) для insert или update. Для select - список полей для выборки из базы, если нужны не все из объекта
	ExcludedFields   misc.StringMap      // Поля ([name]db_name), которые надо исключить из запроса
	Notices          *misc.Messages      // Предупреждения и замечания обработчика
	ExecResult       *ExecResult         // Результат выполнения Exec
	ExtraHeaders     misc.StringMap      // Дополнительные возвращаемые HTTP заголовки

	Extra  any // Произвольные данные от вызывающего
	Custom any // Произвольные пользовательские данные
	// contains filtered or unexported fields
}

Опции запроса к методу

func (*ProcOptions) Create

func (proc *ProcOptions) Create() (result any, code int, err error)

Create -- создать

func (*ProcOptions) Delete

func (proc *ProcOptions) Delete() (result any, code int, err error)

Delete -- удалить

func (*ProcOptions) Get

func (proc *ProcOptions) Get() (result any, code int, err error)

Get -- получить данные

func (*ProcOptions) Others

func (proc *ProcOptions) Others() (result any, code int, err error)

Other -- другой запрос

func (*ProcOptions) Update

func (proc *ProcOptions) Update() (result any, code int, err error)

Update -- изменить

type Tag added in v2.0.18

type Tag struct {
	Name         string
	Aliases      []string
	Description  string
	ExternalDocs ExternalDocs
}

type Tags added in v2.0.18

type Tags []*Tag

func GetTags added in v2.0.18

func GetTags() Tags

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL