Есть ли преимущество вызова файла PHP в запросе AJAX, как предполагается, для прямой конечной точки? - PullRequest
0 голосов
/ 20 марта 2019

Я пишу приложение, которое взаимодействует с Spotify Web API через запросы AJAX.

Я могу сделать это двумя способами. Я могу использовать прямой (HTTPS?) Запрос GET или POST к конечной точке Spotify следующим образом:

$.ajax({
    url: `https://api.spotify.com/v1/search?q=track:hysteria&type=track`,
    method: "GET",
    async: true,
    success: function(successData){
        console.log(successData);
    }
});

Или я могу вызвать файл .php с помощью php-оболочки для связи с Spotify:

query="hysteria";
$.ajax({
    url: 'getSong.php',
    type: 'POST',
    data: {data:query},
    async: true,
    success: function(successData) {
        console.log(JSON.Parse(successData))
    }
})

getSong.php

<?php
    session_start();
    require '../vendor/autoload.php';

    //Create new spotify session and take accesstoken from session.
    $api = new SpotifyWebAPI\SpotifyWebAPI();
    $accessToken = $_SESSION["accessToken"];
    $api->setAccessToken($accessToken);

    $query=$_POST['data'];

    $results = $api->search($query, 'track'); 
    echo json.encode($results)
?>

Я знаю, что метод PHP требует больше строк кода и использования поставщика для доступа к оболочке Spotify PHP. Из моих примеров видно, что прямой HTTPS-метод более прост.

Что я хочу знать, так это то, есть ли какая-либо польза от безопасности при использовании PHP-оболочек для операций API, таких как этот пример. Почему они используются вместо простых запросов AJAX?

Для более сложных запросов мне всегда нужно было бы проходить аутентификацию в Spotify и получать токены при использовании прямого HTTP-запроса. Я пытаюсь разобраться в коде на стороне клиента и на стороне сервера, когда дело доходит до аутентификации, поскольку я не хочу, чтобы мое приложение вызывало какие-либо проблемы с безопасностью для пользователей.

Ответы [ 4 ]

1 голос
/ 20 марта 2019

Самый важный момент в моих глазах: в вашем PHP-файле есть токен API.Вы не хотите предоставлять этот токен через некоторые файлы JS для вызова AJAX, верно?Каждый может легко увидеть ваш токен, нажав F12.Проще говоря: если для вызова API требуются токены или другая защита доступа, НИКОГДА не используйте прямые вызовы AJAX со стороны клиента.

Еще один момент: если у вас есть JS-интерфейс, вы не хотите, чтобы в нем было много логики, но еслив основном у вас есть приложение, которое не использует никаких других пользовательских операций с бэкэндом и только вызывает целевой API, тогда вы можете не захотеть добавлять свой собственный бэкэнд только для небольшого списка и отображения.

Еще один момент:Если вы используете Javascript, эти файлы кэшируются на стороне клиента.Так что да: если API изменяет сохраненные файлы, возможно, все еще используется, и ваше программное обеспечение больше не будет работать.

И: Если некоторые беспокоятся о производительности: Конечно, вы быстрее, напрямую вызывая API из вашегоклиент, но преимущества и безопасность, которые вы получаете от маршрутизации ваших звонков через файлы PHP, стоят намного больше.

1 голос
/ 20 марта 2019

Одним из преимуществ использования PHP является то, что вы можете добавить дополнительный код или логику, которые вы не хотите показывать в своем файле JS. Если вы заинтересованы в производительности, тогда obvs, вызывающая конечную точку Spotify напрямую из AJAX, немного улучшит ее.

1 голос
/ 20 марта 2019

Решение Javascript работает, только если вы используете Поток неявного предоставления https://developer.spotify.com/documentation/general/guides/authorization-guide/#implicit-grant-flow

В противном случае вам необходимы серверные решения для авторизации.Потому что вы будете работать с секретными ключами.

1 голос
/ 20 марта 2019

Все зависит от того, что вы делаете с возвращенной информацией!

Если вы не хотите ничего делать с возвращенной информацией, вы можете просто отобразить ее для конечного пользователя. Однако, если вы хотите кэшировать результаты или выполнить какой-либо анализ запроса или запрошенных результатов, таких как использование пользователя и т. Д., То внутренний бэкэнд PHP облегчит это.

Существует также проблема, заключающаяся в том, что при прямом вызове API сеть клиента будет использоваться в отличие от хост-сервера с вызовом PHP при получении результатов. Наряду с этим требуется дополнительный переход для получения информации из скрипта PHP (клиент вызывает скрипт PHP, скрипт PHP вызывает API, скрипт PHP возвращает результат клиенту).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...