• Как организовать доступ к ресурсам в REST API?

    gobananas
    @gobananas
    finishhim.ru
    Перемудрили. Всё должно быть очень просто. Что такое тип медиа? Музыка или видео? Так по
    /movies/genre/{id}/film/{id} - фильмы
    /music/albums/{id}/tracks/{id} - музыка

    Далее. Если я знаю id трека или фильма мне надо дать возможность обратиться непосредственно к нему:
    music/track/{id} - всё

    Если я не знаю какой трек мне нужен я прошу все треки из направления музыкального, например rap у него id=13
    music/style/13

    По этому запросу выдаются пачки направления по 100, 300 или 1000 штук в зависимости от ресурсов и можно указать пагинатор
    music/style/13/2 - вторую страницу направлений мне покажите

    Именно поэтому параметры лучше передавать в явном виде в url типа style=13&page=2 потому что так не запутаешься что такое 13 и что такое 2.

    Если я совсем ничего не знаю и жанры тоже должен быть вспомогательный метод для получения всех жарнов, как у ВК для получения городов например. Запрос вида:
    music/allganre?page=0

    отдаёт 100 пар вида "название жарнра -> id" так сделав 5 запросов с page=0/1/2/3/4 я в своём приложении смогу иметь всю базу возможных жанров. Можно сделать метод что бы получить жанр конкретной песни:
    music/getganre?track=1456

    И т.п.
    music/getalbums/1456 - получить все альбомы исполнителя
    music/detailalbum/1456 - получить все данные об альбоме (год выпуска и т.п.)
    music/tracksalbum/1456 - получить список треков конкретного альбома

    В общем идите не от частного к общему а наоборот, представьте с чего начать работу человеку который ничего не знает. Максимальную атомарность запросов введите что бы они были между собой никак не связаны. И человек сначала получит жарны, по жанру список исполнителей, по нему список альбомов, по нему список песен, по нему данные о нужной песне. И это всё отдельные запросы.
    Ответ написан
    Комментировать
  • Как использовать Leaflet оффлайн?

    @ssssergey Автор вопроса
    В общем, благодаря ответу ittim мне удалось дойти до 3 пункта из его списка.
    Просто хочется поподробнее раскрыть первые два пункта для тех кому интересно.
    1. С сайта extract.bbbike.org скачивается нужный вам фрагмент карты. Там в поле:
    - "Format" выбираете "OSM XML 7z";
    - "Your email adress" вписываете ваш адрес почты, на которую они пришлют фрагмент карты;
    - "Name of area to extract" - как-нибудь обзовите фрагмент;
    Потом идет кнопка Extract. Ее пока пропускаете. А нажимаете на кнопку поменьше и пониже "here". Ну естественно перед этим нужно навести карту справа на необходимое место. Если промахнулись ничего страшного. Нажимаете на появившуюся кнопку "Select a different area" и все возвращается в исходное положение. После того как вы убедились, что оранжевый прямоугольник покрывает необходимый участок нажимаете "Extract". Все. В течение получаса на вашу почту придет ссылка, по которой вы скачаете свой фрагмент.
    2. Скаченные фрагмент это не картинка, а XML данные, которые нужно преобразовать в картинки (tiles). Для этого с сайта maperitive.net скачиваете программку. Запускаете. Заходите File->Open map sources, выбираете скачанный XML фрагмент (предварительно распакованный). Программка задумается ненадолго (в зависимости от размера файла). Заходите в Tools->Generate Tiles. После этого программка будет думать еще дольше. По завершению в папке Tiles внутри программной папки появятся те самые тайлы в формате png.
    3. Оказалось, что сервер можно не поднимать. Просто прописываете ссылку на папку с тайлами. Например: d:/Tiles//{z}/{x}/{y}.png

    P.S. Оказалось можно пропускать 1 пункт и делать тайлы прямо из программки Maperitive.
    P.P.S. Программка Maperitive оказалась непростой. В нижней части имеется поле командной строки, которое позволяет осуществлять гибкую настройку. Например, по умолчанию осуществляется рендеринг пяти уровней зума, но если написать в командной строке generate-tiles minzoom=8 maxzoom=18, то можно зум рендерится с 8 до 18 уровней.

    P.P.P.S. Оказалось, что 1 пункт (т.е. локальная подгрузка стороннего источника карт) все-таки необходим, если вы хотите видоизменять карту, применяя так называемые Правила (Rules). Встроенная карта на эти изменения не реагирует. В частности, я пытался сделать так, чтобы названия иностранных населенных пунктов (ну например турецких) отображались на русском или английском, но не на турецком. Или чтобы аэропорты были подписаны. Так вот это удалось сделать только подгрузив карты из локального источника.
    Ответ написан