Skip to content

Commit fb4b711

Browse files
committed
0.0.1
1 parent 824666d commit fb4b711

5 files changed

Lines changed: 0 additions & 83 deletions

File tree

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
cmd/httpserver/bin/windows/httpserver.exe
2-
cmd/httpserver/bin/windows/httpserver.exe

README.md

2.94 KB

REST_IBMMQ

Зачем еще раз писать про HTTP сервер на Go?

Действительно зачем?
Столько написано статей, казалось бы, уже разжевано все, что только можно. В том то и проблема, написано много, но все статьи закрывают отдельные задчи или мелкие требования.
Полноценного примера HTTP сервера для построения REST API я не нашел (возможно, плохо искал).

Функциональность HTTP сервер

Программный код в моем репозитории реализует следующий функционал:

  • Передача параметров для запуска через командную строку
  • Настройка параллельного логирования в Stderr и файл
  • Настрой уровней логирования "DEBUG", "WARN", "ERROR", "INFO"
  • Настройка HTTP сервера через конфигурационный файл
  • Корректный запуск и
  • Корректная остановка HTTP сервера с закрытием контекста
  • Кастомная структура для хранения ошибок
  • внедряется номер версии программы, дата сбори и номер commit
  • Basic аутентификация
  • JWT
  • MS AD аутентификация

Структура сервера. Запуск и останов

Основные компоненты / пакеты сервера:

  • main - содержит миминум кода. Его задача обработать входные флаги, установить уровень логирования, создать демон и запустить его. После запуска демона ожидать его завершения.
  • daemon - создает и связывает все корневые и обработчики. Например, в моем адаптере IBM MQ, daemon содержит сервисы: HTTP сервер, пул подключений к IBM MQ, обработчик очeреди IBM MQ, обработчик XML, обработчик кэша секретных ключей. Также daemon создает корневой контекст, который используется для корректной остановки всех сервисов. В задачи daemon входят считывание конфигурационного файла и создание конфигураций для всех сервисов.
  • httpserver - собственно HTTP сервер. Включает в себя: листенер, роутер, HTTP сервер, набор обработчиков.
  • handler - набор обработчиков HTTP запросов. Ключавая задача состояла в максимальном упрощении написания обработчиков. Ниже я покажу, что из этого получилось.
  • httplog - логирование входящих и исходящих запросов и ответов, включая заголовок и тело. Влючение и уровень логирования управляется через конфигурационный файл.

На следующем рисунке показана упрощенная UML диаграмма последовательности запуска и остановки сервера.

http_server_run_stop

Организация кода и сборка

Структура каталогов

|- cmd 
    |- client - 
    |- httpserver 
        |- bin 
            | - windows
            | - linux
|- daemon
|- error
|- http
    |- client 
    |- handler
    |- httplog 
|- log
|- vendor
go build -v -mod vendor

Сборка

Для сборки используется простой make файл с неколькими режимами (взят где-то на посторах интернета):

GOOS=${GOOS} go build -v -a -mod vendor \
-ldflags "-X main.commit=${COMMIT} -X main.buildTime=${BUILD_TIME}" \
-o bin/${GOOS}/${APP} 

В mainmain.main в переменную записываю итоговую информацию о версии, commit и дате сборки

app.Version = fmt.Sprintf("%s, commit '%s', build time '%s'", version, commit, buildTime)

Обработка ошибок

Создание ошибок
Логирование ошибки в месте возникновения
Передача ошибки на уровень вверх
Обработка кастомных ошибок

http/client/clientcall.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,15 +182,3 @@ func (c *ClientCall) Process(ctx context.Context, cnt string, header Header, bod
182182
}
183183
}
184184
}
185-
186-
/*
187-
// _writeRequestHeader write HTTP header for request
188-
// =====================================================================
189-
func _writeRequestHeader(header Header, req *http.Request) {
190-
if header != nil {
191-
for key, h := range header {
192-
req.Header.Add(key, h)
193-
}
194-
}
195-
}
196-
*/

http/handler/handler_header.go.bak

Lines changed: 0 additions & 21 deletions
This file was deleted.

http/handler/handler_log.go.bak

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)