Ответы пользователя по тегу RESTful API
  • API для мессенджера, REST + WS или чистый WebSocket?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Только чистый WebSocket со своим дополнительным шифрованием трафика "точка-точка" внутри WSS-"трубы". Весь служебный трафик (логин/логаут, состояния и т.д.) - там же.
    Чтобы можно было использовать обмен сообщениями как в веб, так и в любых нативных приложениях для разных операционок.
    Ответ написан
  • Какие технологии выбрать для web/desktop app?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Если приложение автономное, не взаимодействует с интернетом во время запуска и работы: Архив с html/js/css файлами и последующим запуском index.html-файла через браузер (через "ярлык" или напрямую: через проводник и т.п.) запаковать любой инсталляшкой.
    Вес - небольшой (5-7мб), функционал калькуляции - рабочий.

    Иначе: nwjs.io. Вес "пустого" приложения от 85Мб.
    Ответ написан
    Комментировать
  • Как писать бек для react spa проекта?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Для данных - json.
    Для контента - html.
    Скрипт - один, но с разными типами ответов. Также, его можно смонтировать на разные route-point'ы для удобства использования.
    Ответ написан
    4 комментария
  • Какой код ответа возвратить, если ресурс не существует и доступ к ресурсам этого же типа запрещен?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Код ошибки в порядке следования цепочек проверок.
    401 - верно.
    Ответ написан
    Комментировать
  • Как правильно спроектировать рест-ресурсы?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Тот, кто отвечает за действие - тот и end-point.

    [Примеры]

    Данные объекта (профиль пользователя): /api/profile/user/<команда(метод)>

    Токен доступа:
    /api/security/accessToken/<команда(метод)>

    Постинг:
    /api/content/article/new
    Ответ написан
  • Как оптимально реализовать фронт на Vue и бэк на Yii (желательно без CORS)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Мне не надо REST API (хотя я его уже написал и настроил), мне надо чтобы работало быстро и без лишних сложностей. Или в наше время так не бывает?
    Зачем API? Зачем vue? Зачем Yii? Не думали, что сложность именно в применяемых инструментах?

    Однако, получать тормоза только из-за продвинутой(двинутой?) архитектуры не хочется.
    Говорите правильно, но "продолжаете есть кактус". ЗАЧЕМ?!

    Есть PHP, есть JS/AJAX - всё!

    Берёте и делаете так, чтобы не было API/CORS и тучи "жрущих" производительность никому ненужных вложенных ООП-классов на PHP (для тех, кто может нормально кодить!).

    Обмен данными?
    fetch() для json! с методом GET/POST и Content-type: text/plain

    Хотите блоки разметки быстро менять без перезагрузки страницы и без всяких CORS?
    Легко: includeHTML (одна строка!)
    Ответ написан
    6 комментариев
  • На каком фреймворке проще всего написать фронтенд для работы с rest api?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    fetch() и, в принципе, всё.
    Для визуализации (подгрузка HTML/js/css): includeHTML (с github).
    Ответ написан
    Комментировать
  • Try catch или then catch для rest api?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Прочитал на stackoverflow что try catch лучше использовать для синхронных действий, а then catch для асинхронных? Так ли это?
    Да.
    Т.к. try-catch блокирует дальнейшее исполнение кода (если он без async/await обёртки) и ждёт завершения текущей секции.
    Ответ написан
  • Как сделать REST API приложение на PHP?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Основные функции для реализации на "чистом" PHP:
    1. preg_match(контроль входных данных запроса),
    2. switch(ветвление на нужные API функции),
    3. json_* (закодировать/раскодировать)
    4. hash (подпись запросов)

    Пример генерации подписи запроса к API (п.4):
    $r = bin2hex(random_bytes(16));
    $t =time();
    $token='client token';
    $params=array(
    	'value1'=>1,
    	'value2'=>'test'
    	);
    $data=http_build_query($params);
    $hash=hash('sha256',$r.$t.$token.$data);
    Ответ написан
    Комментировать
  • Rest при построении веб-сайтов?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    API - это сервер
    Клиент API - это (наш частный случай!) JS в браузере.

    1. Клиент запросил
    2. API вернул данные (напр, в JSON)
    3. Клиент API разместил в DOM (обработал полученные данные)
    4. Пользователь увидел результат на экране

    API и Клиент API - всегда проверяют версию протокола обмена, и если она обновилась на сервере, то клиент обновляется сам или просит об этом пользователя.
    Ответ написан
    Комментировать
  • Как грамотнее в рамках REST-api отдавать сущности SQL базы данных со связями?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Можно делать JOIN с пагинацией (пакетный запрос).
    Например, "вернуть список заказов и статусы для X-записей заказов в количестве N".
    Ответ написан
  • Стоит ли использовать REST API для асинхронной загрузки страниц в WordPress?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Каким образом проще всего осуществить функцию загрузки страницы без полной перезагрузки сайта?
    includeHTML
    Ответ написан
    Комментировать
  • Существует ли сервис, на котором можно проверить правильность сформированного запроса к ABCP?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    HTML+fetch() или бесплатная софтина rest-debugger (от Embarcadero)
    Ответ написан
    Комментировать
  • Как защитить Rest API от использования третьими лицами?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Здесь подробно всё описано.

    Данное API работает без авторизации пользователя.
    В качестве "прозрачной" (для пользователя) авторизации приложения (на серверном API), на клиенте - используем два параметра для формирования запрашивающего токена авторизации: идентифицирующую устройство информацию и публичный серверный ключ.

    Токен: ID-устройства (или любую идентифицирующую информацию мобильного устройства) мы шифруем открытым/публичным ключом сервера, хранящимся в приложении.

    На сервере API - логируем все ошибки авторизации.
    При их появлении - выпускаем новый клиент с новым открытым/публичным серверным ключом и новой логикой формирования токена.
    Ответ написан
    Комментировать
  • Как подписать токен в RestAPI?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сцена 1:
    Клиент: "Сервер, я хочу авторизоваться"
    Сервер: "Да неужели?! Сейчас мы тебя пробьём по нашей базе DNSBL и SpamBL... Ну, вроде нормально. Вот лови TEMPORARY PUBLIC KEY и через 5 секунд жду от тебя логина и пароля, подписанные моим временным ключом! Время пошло!"

    Если клиент успел за отведённое время действия публичного ключа верно ввести логин и пароль у себя на клиенте, захешировать, подписать ключом сервера и отправить на сервер - пользователь считается авторизованным.
    Ответ написан
  • SPA и REST API - как грамотно построить аутентификацию?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    5a972d181cee3290572701.png
    Вот здесь
    проверенный и рабочий метод. Никаких сессий!
    Только проверка "протухания" токена и его обновление(обмен!) в "прозрачном" режиме.
    Ответ написан
  • Как организовать доступ к ресурсам в REST API?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Как-то непонятно: обычно методы (аналоги: create, set, get,update, delete и т.д.) выносятся (монтируются) на точки входа клиентских запросов (endpoint).
    Все передаваемые методу параметры - это уже POST JSON (в большинстве случаев).
    Бывают и исключения, когда методы простые и параметры идут в адресе endpoint, но тогда адрес должен возвращать БЕЗ редиректов и сервер должен корректно "понимать" этот запрос, т.к. фактически это уже поисковый запрос, не имеющий отношения к RESTful.

    напр. пользователю понравился музыкальный трек, он переходит по ссылке /media/{track_id}, а его редиректит на /music-groups/{mg_id}/albums/{a_id}/tracks/{track_id}
    Адрес не меняем (без редиректа!), но можем вернуть в ответе расширенную информацию о треке, группе, альбоме в виде структуры (массив или дерево).
    Ответ написан
    2 комментария
  • Как лучше сделать закрытое REST API?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    CORS не имеет ничего общего с API. Т.к. это - браузерная технология и используется для скриптов внутри браузеров.

    Простой принцип разделения:
    1. Для всех - список параметров без ключа.
    2. Для себя - список параметров с неким ДИНАМИЧЕСКИМ ключом (токен подписи) и формулой его генерации, которая известна только Вам.

    Теперь, защита от перехвата (лучше делать, даже если есть SSL):
    1. На сервере храним формулу генерации подписи запроса на основе входных параметров запроса к API и временной метки.
    2. При обращении к функциям "закрытого" API (для личных целей) Вы формируете подпись запроса, предварительно СИНХРОНИЗИРУЯ время с серверным, и затем, согласно формуле, отсылаете на сервер.
    3. Сервер, зная формулу делает тоже самое и сверяет значения присланной и полученной (по той же формуле на стороне сервера) подписи: если они не совпадают ИЛИ просрочена ИЛИ это дубликат - сервер запрос к API отклоняет, иначе - запрос исполняется.
    4. Сервер кэширует запрос на время погрешности синхронизации, чтобы предотвратить повторное использование идентичного запроса посредством MiTM-перехвата.
    Ответ написан
    Комментировать
  • Есть ли смысл подписывать REST API запросы?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Сервер создаёт (генерирует случайно) при регистрации пользователя REST-token и затем, постоянно хранит в своей базе данных связку REST-token'а с клиентом (1-к-1): clientID => REST-token
    2. REST-token - сервер передаёт клиенту через E-MAIL или SMS сразу после регистрации и просит ввести выданный код в поле, находящееся внутри запущенного приложения.
    Или же, активировать переходом по ссылке, если это - web-приложение в браузере, открываемое по линку (а не stand-alone, запускаемое с ярлыка мобильного интерфейса).
    3. Клиент подписывает каждый запрос к серверу этим токеном.

    REST-token - клиент никогда не передаёт!

    4. Сервер при поступлении запроса от клиента - подписывает все данные запроса токеном того же клиента на своей стороне.
    5. Сервер сразу же сверяет: если подписи совпадают - запрос принимается к исполнению.

    Для предотвращения подбора ключа REST-token - вводится случайно-генерируемая переменная в перечень полезных параметров при запросах к API: r,rand,random и т.д.
    Ответ написан
    Комментировать
  • Как начать работать с REST api конкретного ПО?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Используйте curl на стороне битрикса + документация API инфо-системы для создания верных запросов.
    Это всё.
    Ответ написан
    Комментировать