Реализовать базовые эндпоинты для управления домашней книжной библиотекой с хранением данных в памяти.
-
Для всех эндпоинтов, связанным с управлением книгами, сервис принимает и отдает данные в формате
JSON
. Для ответа всегда проставляется заголовокContent-Type: application/json
. -
Пользователь может добавить новую книгу в библиотеку с помощью эндпоинта
POST http://127.0.0.1:8080/api/v1/books
.Пример тела запроса:
{ "title": "Три Мушкетера", "author": "А. Дюма", "publication-date": "06.2022", "publisher": "Издательство Эксмо", "edition": 1, "location": "Первый шкаф, вторая полка, 4 слева" }
Пример тела ответа:
{ "id": 1, "title": "Три Мушкетера", "author": "А. Дюма", "publication-date": "06.2022", "publisher": "Издательство Эксмо", "edition": 1, "location": "Первый шкаф, вторая полка, 4 слева" }
Полная
OpenAPI
схема объектаBook
, использующаяся во всех запросах и ответах кapi
сервиса:components: schemas: Book: type: object properties: id: type: integer type: int64 title: type: string required: true minLength: 1 maxLength: 255 author: type: string required: true minLength: 1 maxLength: 128 publication-date: type: string required: true minLength: 7 maxLength: 7 publisher: type: string minLength: 1 maxLength: 255 edition: type: int32 minimum: 1 location: type: string minLength: 0 maxLength: 255
-
Пользователь может получить список всех книг с помощью эндпоинта
GET http://127.0.0.1:8080/api/v1/books
. -
Пользователь может получить информацию о конкретной книге с помощью эндпоинта
GET http://127.0.0.1:8080/api/v1/books/{id}
. -
Пользователь может книгу из библиотеки с помощью эндпоинта
DELETE http://127.0.0.1:8080/api/v1/books/{id}
. -
Сервис должен возвращать ошибки с кодом
400
в случае невалидного запроса на создание книги и404
в случае попытки получить информацию по неизвестномуID
. Возвращаемая ошибка должна быть в форматеJSON
и содержать причину.
Допустимые значения для объектаBook
указаны вOpenAPI
схеме выше.components: schemas: ValidationError: type: object properties: field: type: string required: true reason: type: string required: true Errors: type: array items: $ref: '#/components/schemas/ValidationError'
ID
книги генерируется на стороне сервиса.
- Для построения
api
допускается использовать только библиотекуnet/http
и предоставляемый ею роутер.
Многие разработчики, пришедшие в Go
из таких языков как C++
, Java
или
Python
, часто пишут код создания и инициализации объекта следующим образом:
type Point struct {
x, y int
}
func New() *Point {
return &Point{}
}
func (p *Point) Init(x, y int) {
p.x = x
p.y = y
}
В Go
применение New
в паре с Init
считается антипаттерном, так как
усложняет код и разбивает процесс создания объекта на две части. Идиоматичный
вариант:
type Point struct {
x, y int
}
func New(x, y int) *Point {
return &Point{x: x, y: y}
}
-
Спецификация OpenAPI - подробное описание стандарта
OpenAPI
(версия 3) использующегося в курсе для описанияHTTP API
. -
Working with Errors in Go - описывает текущий подход по работе с ошибками в
Go
. -
Memory management - подробное описание управления памятью в
Go
(стек и куча).