Skip to content

Latest commit

 

History

History
357 lines (299 loc) · 16 KB

bookcases.md

File metadata and controls

357 lines (299 loc) · 16 KB

Книжные полки

Личные подборки пользователей. Могут быть разных типов - произведения ("Буду читать", "Жду перевод", "Любимая детская фантастика" и прочие), издания - "Хочу приобрести", "Куплю", "Лужат на даче" и пр.) и подборки фильмов.

Список полок пользователя

Запрос

GET /user/{user_id}/bookcases

Отображаются список публичных книжных полок пользователя

Параметры

user_id - id пользователя

Пример

https://api.fantlab.ru/user/2/bookcases - список публичных полок юзера "Р.Букашка" (user_id 2)

Ответ

[
    {
        "bookcase_comment": String|null,            # Комментарий (описание) полки
        "bookcase_group": String,                   # Тип книжной полки из списка (free, sale, buy, read, wait)
        "bookcase_id": Int,                         # id книжной полки
        "bookcase_name": String,                    # Название полки
        "bookcase_shared": Int,                     # Тип полки: 0 - закрытая, 1 - публичная
        "bookcase_type": String,                    # Тип книжной полки из списка (work, edition, film)
        "date_of_add": DateTime,                    # Дата добавления в формате: "2011-04-23 15:59:50"
        "date_of_add_iso": DateTime,                # Дата добавления в формате: "2011-04-23T15:59:50+03"
        "date_of_edit": DateTime|null,              # Дата последнего редактирования в формате: "2011-04-23 15:59:50"
        "date_of_edit_iso": DateTime|null,          # Дата последнего редактирования в формате: "2011-04-23T15:59:50+03"
        "item_count": Int,                          # Количество элементов на полке
        "sort": Int                                 # Порядковый номер при сортировке
    },
    ...
]

Содержимое книжной полки (подборки)

Запрос

GET /user/{user_id}/bookcase/{bookcase_id}?offset={offset}

Не требует авторизации, но при попытке получить содержимое закрытой полки вернется ошибка. Метод используется для получения содержимого полок всех типов, но ответ будет отличаться для разных типов.

Параметры

user_id - id пользователя
bookcase_id - id книжной полки
offset - смещение от начала (не обязательный, по у)

Пример

https://api.fantlab.ru/user/2/bookcase/8180 - одна полка (bookcase_id 8180) юзера"Р.Букашка" (user_id 2)

Ответ для полки с произведениями:

{
    bookcase_id: Int,                        # id книжной полки
    bookcase_items: [ | null                 # содержимое
        {
            bookcase_item_id: Int,           # id item-а книжной полки (счетчик)
            item_id: Int,                    # id произведения
            item_comment: String|null,       # комментарий
            name: String,                    # название произведения
            rusname: String                  # русскоязычное название произведения
            autor_name: String|null,         # комбинированная строка с авторами
            ext: {                           # карточка произведения с полной информацией
                ...
            }
        },
        ...
    ],
    bookcase_type: String,                   # тип книжной полки
    count: Int,                              # количество item-ов на книжной полке
    current_page: Int|null,                  # номер текущей страницы (если null, то первая)
    offset: Int,                             # смещение
    offset_h: Int,                           # верхняя граница смещения
    page_count: Int                          # номер текущей страницы
}

Ответ для полки с изданиями (отличается только структура bookcase_items):

{
    ...
    bookcase_items: [ | null                 # содержимое
        {
            autors: String,                  # авторы издания
            bookcase_item_id: Int,           # id item-а книжной полки
            edition_id: Int,                 # id издания
            item_comment: String|null,       # комментарий
            name: String,                    # название издания
            publisher: String,               # издатель
            year: Int                        # год издания
            ext: {                           # карточка издания с полной информацией
                ...
            }
        },
        ...
    ],
    ...
}

Ответ для полки с фильмами (отличается только структура bookcase_items):

{
    ...
    bookcase_items: [ | null                 # содержимое
        {
            bookcase_item_id: Int,           # id item-а книжной полки
            country: String,                 # страна
            director: String,                # режиссер(ы) фильма
            film_id: Int,                    # id фильма
            item_comment: String|null,       # комментарий
            name: String,                    # название фильма
            rusname: String,                 # русскоязычное название фильма
            year: Int                        # год выпуска
            ext: {                           # карточка фильма с полной информацией
                ...
            }
        },
        ...
    ],
    ...
}

Свои полки (авторизированные запросы)

Персонализированные авторизованные запросы для работы пользователя со своими личными полками просходит в роут-зоне /my/bookcases/* "/my/" - зона API, выделенная для работы пользователям со своими личными данными. Тут, в отличие от роутов библиобазы, при построении урлов используется более классическая логика "items/id/action" и множественное число

Создание книжной полки

Запрос

AUTH POST /my/bookcases/add?name={name}&type={work|edition|film}&shared={on|off}&comment={comment}

Требует авторизации (передачи аутентификационного заголовка или кука в запросе)

Параметры

name - название полки
type - тип полки (work - произведения, edition - издания, film - фильмы)
shared - открытая полка (on) или нет (off)
comment - текст комментария к книжной полке

Пример

POST //api.fantlab.ru/my/bookcases/add?name=Test%20bookcase&type=work&shared=0&comment=Test%20comment

Ответ

id новосозданной книжной полки

Примечание: содержимое полки в запросе передать нельзя. Предполагается, что элементы будут добавляться пользователем по одному вручную.

Редактирование книжной полки

Запрос

AUTH POST /my/bookcases/{bookcase_id}/edit?name={name}&type={work|edition|film}&shared={on|off}&comment={comment}

Требует авторизации (передачи аутентификационного заголовка или кука в запросе)

Параметры

bookcase_id - id книжной полки для редактирования (передаваемый пользователь должен быть владельцем этой полки)
name - название полки
type - тип полки (work - произведения, edition - издания, film - фильмы)
shared - открытая полка (on) или нет (off)
comment - текст комментария к книжной полке

Пример

POST //api.fantlab.ru/my/bookcases/11945/edit?name=Test%20bookcase&type=work&shared=0&comment=Test%20comment

Ответ

1 в случае успешного завершения

Удаление книжной полки

Запрос

AUTH DELETE /my/bookcases/{bookcase_id}/delete

Требует авторизации (передачи аутентификационного заголовка или кука в запросе)

Параметры

bookcase_id - id книжной полки для редактирования (передаваемый пользователь должен быть владельцем этой полки)

Пример

DELETE //api.fantlab.ru/my/bookcases/186919/delete

Ответ

1 в случае успешного завершения

Содержимое одной полки авторизованного пользователя

Запрос

AUTH GET /my/bookcases/{bookcase_id}/items?offset={offset}

Требует авторизации (передачи аутентификационного заголовка или кука в запросе) В отличие от запроса для неавторизованного отдаются все полки (открытые и закрытые). Метод используется для получения содержимого полок всех типов, но ответ будет отличаться для разных типов. Но при попытке просмотреть полку с владельцем, не совпадающим с переданным, вернется ошибка.

Параметры

bookcase_id - id полки
offset - смещение от начала

Пример

https://api.fantlab.ru/my/bookcases/3056/items

Ответ для полки с произведениями:

Идентичен ответу для неавторизованного

Добавление или удаление элементов с книжной полки

Запрос

AUTH POST /my/bookcases/{bookcase_id}/items/{item_id}/add    # добавить на полку 1 позицию
AUTH POST /my/bookcases/{bookcase_id}/items/{item_id}/delete # убрать с полки 1 позицию

Требует авторизации (передачи аутентификационного заголовка или кука в запросе).

Параметры

item_id - id элемента (произведения, издания или фильма)
bookcase_id - id книжной полки

Пример

POST api.fantlab.ru/my/bookcases/3056/items/1/add - добавить "Гиперион" Дэна Симмонса на книжную полку с id = 3056

Ответ

Количество элементов на полке после изменения

Добавление комментария к item

Запрос

AUTH POST /my/bookcases/{bookcase_id}/items/{item_id}/editcomm?txt={comment}

Требует авторизации (передачи аутентификационного заголовка или кука в запросе)

Параметры

bookcase_id - id книжной полки
item_id - id item'а
txt - комментарий

Пример

POST /my/bookcases/123/items/456/editcomm?txt=Отдал%20Васе

Ответ

1 в случае успеха

Список всех полок авторизованного пользователя

Запрос

AUTH GET /my/bookcases/

Требует авторизации (передачи аутентификационного заголовка или кука в запросе) В отличие от списка для неавторизованного отдаются все полки (открытые и закрытые)

Параметры

user_id - id пользователя

Пример

https://api.fantlab.ru/my/bookcases

Ответ

Идентичен ответу на запрос полок для неавторизованного пользователя

Информация о конкретной полке авторизованного пользователя

Запрос

AUTH GET /my/bookcases/{bookcase_id}/description

Требует авторизации (передачи аутентификационного заголовка или кука в запросе) В отличие от запроса для неавторизованного отдаются все полки (открытые и закрытые). Метод используется для получения информации о конкретной полке пользователя. Соответственно выдача идентична выдачи при получении всех полок. При попытке просмотреть полку с владельцем, не совпадающим с переданным, вернется ошибка.

Параметры

bookcase_id - id полки

Пример

https://api.fantlab.ru/my/bookcases/3056/description

Ответ

Идентичен ответу для получения всех полок пользователя, только отдается конкретный json объект, соответствующий запрошенной полке

Список полок авторизованного пользователя одного типа + наличие элемента на полках пользователя

Используются для вывода список полок юзера в карточке базы.

Запрос

AUTH GET /my/bookcases/type/{type}/{item_id}

Требует авторизации (передачи аутентификационного заголовка или кука в запросе) Возвращает список всех полок пользователя данного типа с признаком, присутствует ли данный элемент на этой полке (используются для показа списка полок в карточке - сразу список полок юзера и в каких подборках данных элемент есть)

Параметры

item_id - id item'а
type - тип полки (work|edition|film)

Пример

https://api.fantlab.ru/my/bookcases/type/edition/281 - список полок типа "издания" с проверкой наличиия на них edition281

Ответ (список полок)

[
    {
        "bookcase_id": Int,                         # id книжной полки
        "bookcase_name": String,                    # Название полки
        "item_added": Int,                          # Возвращается 1, если элемент присутствует на данной полке, и 0, если нет
    },
    ...
]