rest

package module
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Nov 19, 2022 License: MIT Imports: 16 Imported by: 0

README

RESTfull support

Documentation

Overview

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

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

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

Index

Constants

View Source
const (
	FlagLogUnknownParams = 0x00000001 // Логировать полученные query параметры, которые не описаны в методе
	//FlagDynamic          = 0x00000002 // Разрешить обработку с использованием этого пути как базового. Например Path="xxx/yyy", будет обрабатывать и запросы типа "xxx/yyy/zzz/qqq"
	//FlagDontParseBody    = 0x00000004 // Не пытаться разбирать тело запроса
	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"
	ScopeSelectObject       = "select.object"
	ScopeSelectObjectStatus = "select.object.status"
	ScopeInsert             = "insert"
	ScopeUpdateID           = "update.id"
	ScopeUpdateGUID         = "update.guid"
	ScopeDeleteID           = "delete.id"
	ScopeDeleteGUID         = "delete.giid"

	// Признак статуса
	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)
)

Variables

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

)

Functions

func BadRequest added in v1.0.0

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

func CheckPeriod added in v1.0.0

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 added in v1.0.0

func Enumerate(e Enumerator) (err error)

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 Init added in v1.0.0

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

func InternalServerError added in v1.0.0

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

func ModuleRegistration added in v1.0.0

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 added in v1.0.0

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

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

func Start added in v1.0.0

func Start() (err error)

Types

type API added in v1.0.0

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

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

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

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

type Enumerator added in v1.0.0

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

type ExecResult added in v1.0.0

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

type FieldDef added in v1.0.0

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

type FuncAfter added in v1.0.0

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

type FuncBefore added in v1.0.0

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

type FuncInit added in v1.0.0

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

type Info added in v1.0.0

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

}

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

type ProcOptions added in v1.0.0

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

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

func (*ProcOptions) Create added in v1.0.0

func (proc *ProcOptions) Create() (headers misc.StringMap, result any, code int, err error)

Create -- создать

func (*ProcOptions) Delete added in v1.0.0

func (proc *ProcOptions) Delete() (headers misc.StringMap, result any, code int, err error)

Delete -- удалить

func (*ProcOptions) Get added in v1.0.0

func (proc *ProcOptions) Get() (headers misc.StringMap, result any, code int, err error)

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

func (*ProcOptions) Others added in v1.0.0

func (proc *ProcOptions) Others() (headers misc.StringMap, result any, code int, err error)

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

func (*ProcOptions) Update added in v1.0.0

func (proc *ProcOptions) Update() (headers misc.StringMap, result any, code int, err error)

Update -- изменить

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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