Коды ошибок соответствуют стандарту RFC 7231 если не описаны иначе.
status_code: 200 – OK 400 – Bad request 404 – Not Found 500 - Internal server error
offset - смещение с начала массива композиций (offset=0 - начало) limit - количество передаваемых композиций type - тип, бывает 2 видов audio и music (можно комбинировать) на каждой странице iphone по 20 композий на каждой странице iPad по 56 композий
Для новых произведений
GET http://media.predanie.ru/api/mobile/v1/compositions/new/?type=audio,music&offset=20&limit=20
Для популярных произведений
GET http://media.predanie.ru/api/mobile/v1/compositions/popular/?type=audio,music&offset=20&limit=20
Для рекомендуемых произведений
GET http://media.predanie.ru/api/mobile/v1/compositions/favorites/?type=audio,music&offset=20&limit=20
Поисковый запрос по произведениям
GET http://media.predanie.ru/api/mobile/v1/compositions/?search=книга&offset=20&limit=20
При поиске выдаются только произведения содержащие аудио или музыку, треки и авторы не выдаются.
Список произведений по категории (категории описаны ниже)
GET http://media.predanie.ru/api/mobile/v1/compositions/?id_category=1234&offset=20&limit=20
Response
{
"status_code" : 200, //код ошибки, желательно дублировать и здесь помимо средств http
"count": 156, //общее количество произведений запроса
"compositions": [
{
"id" : "1001", //id произведения
"name" : "Путь разума в поисках Истины", //имя произведения
"desc": "«Оливер!» — музыкальный художественный фильм...",
"author_name" : "Профессор А.И. Осипов", //имя автора
"img_s" : "http://dir/dir/img_s.jpeg" //путь к уменьшенной картинке произведения
},
{
"id" : "1002",
"name" : "Основы Православной веры ",
"desc": "«Оливер!» — музыкальный художественный фильм...",
"author_name" : "Николай Евграфович Пестов",
"img_s": "http://dir/dir/img_s.jpeg"
},
{...},
]
}
пример ответа, когда offset >= count (определить на месте что испльзовать > или >=)
{
"status_code" : 404,
"message": "Compositions not found"
}
Примечание для iOS разработчика
Баннер получается при каждом 5-м запросе на сервер, начиная с 1-го. Баннер отображается внизу экрана только на списках композиций. В приложении мы считаем количество всех запросов по спискам композиций (GET http://media.predanie.ru/api/mobile/v1/compositions/....)
GET http://media.predanie.ru/api/mobile/v1/banner/?type=iphone
GET http://media.predanie.ru/api/mobile/v1/banner/?type=ipad
параметр может быть iphone или ipad, т.е. мы можем запросить или баннер для iPhone или iPad (в дальнейшем возможно будут заправшиваться отдельные баннера для Android)
сервер случайным образом возвращает баннер из базы баннеров для мобильных приложений
Response
{
"url":"http://ya.ru/", //путь по которому перейдёт пользователь кликнувший на баннер, открывается в браузере
"img": "http://ya.ru/1.png", //путь к картинке баннера
"height": 100 //высота баннера в пикселях
}
GET http://media.predanie.ru/api/mobile/v1/composition-single/?composition_id=1234
Response
{
"respond" : {
"error_code" : "200",
"data" : {
"id": 1, //id произведения
"name": "Догвилль", //имя произведения
"desc": "Визуальный ряд...", //описание произведения
"author_id": 254, //id автора
"author_name": "Достоевский", //название автора композиции
"img_medium": "http://ya.ru/2.png", //ссылка на среднее изображение произведения
"img_big": "http://ya.ru/3.png", //ссылка на большое изображение произведения
"topics": [ //массив тем (категорий)
{
"topic_id": 13, //id темы
"topic_name": "Кино" //имя темы
},
{...}
],
"forms": [ //массив форм
{
"form_id": 12, //id формы
"form_name": "Лекции" //имя формы
},
{...}
],
"genre": [ //массив жанров
{
"genre_id": 7, //id жанра
"genre_name": "Лекции" //имя жанра
},
{...}
],
"tracks" : [
{
"parent" : "t0003005_1",
"id" : "t0003005_1_1",
"name" : "Действие 1",
"time" : 2178,
"url" : "http:\/\/big.predanie.ru\/music\/Classical_music\/Rimskiy-Korsakov\/Skazanie_Kitezh_Fevronia\/kitezh01.mp3"
},
{
"parent" : "t0003005_1",
"id" : "t0003005_1_2",
"name" : "Действие 2",
"time" : 1813,
"url" : "http:\/\/big.predanie.ru\/music\/Classical_music\/Rimskiy-Korsakov\/Skazanie_Kitezh_Fevronia\/kitezh02.mp3"
},
{
"parent" : "t0003005_3",
"id" : "t0003005_3_1",
"name" : "Действие 3",
"time" : 3789,
"url" : "http:\/\/big.predanie.ru\/music\/Classical_music\/Rimskiy-Korsakov\/Skazanie_Kitezh_Fevronia\/kitezh03.mp3"
},
{
"parent" : "t0003005_5",
"id" : "t0003005_4_1",
"name" : "Действие 4",
"time" : 3423,
"url" : "http:\/\/big.predanie.ru\/music\/Classical_music\/Rimskiy-Korsakov\/Skazanie_Kitezh_Fevronia\/kitezh04.mp3"
}
],
"parts" : [
{
"id" : "c0003005_1",
"img" : "http:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/b\/b3\/Ivan_Bilibin_151.jpg\/220px-Ivan_Bilibin_151.jpg",
"name" : "акт 1",
"id_parent" : "0",
"desc" : "Опера открывается увертюрой..."
},
{
"id" : "c0003005_2",
"img" : "http:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/b\/b3\/Ivan_Bilibin_151.jpg\/220px-Ivan_Bilibin_151.jpg",
"name" : "акт 2",
"id_parent" : "0",
"desc" : "Акт 2 после антракта и горячего чая"
},
{
"id" : "c0003005_3",
"img" : "",
"name" : "Действие 3",
"id_parent" : "c0003005_2",
"desc" : "В Великий Китеж приходит страшная весть ..."
},
{
"id" : "c0003005_4",
"img" : "http:\/\/predanie.ru\/download\/iblock\/a90\/Rimsk_Korsakov100x100.png",
"name" : "Действие 4",
"id_parent" : "c0003005_2",
"desc" : "Гришка и Феврония идут по лесу..."
}
],
}
}
}
GET http://media.predanie.ru/api/mobile/v1/author/?letter=А
возвращает всех авторов на данную букву
GET http://media.predanie.ru/api/mobile/v1/author/?search=Пушкин&offset=0&limit=100
если count>100 то при проматывании вниз пошлётся новый запрос с offset=100
при поиске выдаются только авторы
Response
{
"status_code" : 200,
"count": 100, //количество найденных авторов
"data": [
{
"id": "5001", //id автора
"name" : "Пушкин Александр Сергеевич", //имя автора
"img":"http://ya.ru/pushkin_small.jpg" //маленькая картинка автора (нигде не используем, на всякий случай), если её в БД нет, то не возвращать
},
{...}
]
}
GET http://media.predanie.ru/api/mobile/v1/author/?author_id=5001
Response
{
"status_code" : 200,
"id" : "5001", //id автора
"name" : "Пушкин Александр Сергеевич", //имя автора
"years": "1799 - 1837", //годы жизни
"img": "http://ya.ru/pushkin_medium.jpg", //средняя картинка автора
"desc" : "Пушкин — один из самых популярных лекторов в последние двадцать лет.", //описание автора
"compositions": [ //связанные с ним произведения
{
"id" : "1001", //id произведения
"name" : "Путь разума в поисках Истины", //имя произведения
"author_name" : "Профессор А.И. Осипов", //имя автора (можно не отдавать - как будет удобнее) т.к. мы и так знаем его имя *прим. для серверного разработчика
"img_s" : "http://dir/dir/img.jpeg", //путь к уменьшенной картинке произведения
},
{
"id" : "1002",
"name" : "Основы Православной веры ",
"author_name" : "Николай Евграфович Пестов",
"img_s": "http://dir/dir/img.jpeg",
},
{...}
]
}
Уровень вложенности максимум одинарный
GET http://media.predanie.ru/api/mobile/v1/catalog/
Response
{
"categories": [ //массив категорий
{
"id_category": 102, //идентификатор категории
"id_parent": 0, //идентификатор родительской категории
"name": "Жития святых, биографии", //название категории
"categories" : [ //вложенные подкатегории
{
"id_category": 256, //идентификатор категории
"name": "Патерики, сборники" //название категории
},
{...}
]
},
{...}
]
}
размеры для произведения такие formats: tiny: { width: 105 , quality: 95 } middle: { width: 200 , quality: 95 } big: { width: 640 , quality: 95 } редактора стараются делать для произведения минимум 640х480 - не знаю насколько у них получается придерживаться этого правила
"img": "http://ya.ru/pushkin_medium.jpg", //средняя картинка автора
у нас на данный момент есть только маленькая (width 100px) и большая (width 300px)
какую лучше?