Если определенный API не позволяет получить несколько мест в 1 GET-запросе, является ли опция foreaching и выполнение 1 GET-запроса на место единственным вариантом? - PullRequest
0 голосов
/ 17 мая 2019

В приведенной ниже функции я сначала получаю все места, которые пользователь занял в списке желаний. Каждое место имеет свойство под названием place_id, которое необходимо использовать в GET-запросе к API мест Google. Вот почему я перебираю все места, делаю GET-запрос для каждого из них, а затем помещаю результат в массив, который, наконец, отправляется внешнему интерфейсу.

Проблема, с которой я сталкиваюсь, заключается в том, что если я перечислю слишком много мест, выполнение этой функции займет много времени, поскольку ей придется выполнять 5-10-100 запросов GET. Это правильный способ сделать это? Есть ли альтернативы?

public function getWishlist($username){
    $user = User::where('username', $username)->first();
    $wishlistedPlaces = $user->wishlistedPlaces;
    $finalPlaces = [];

    foreach ($wishlistedPlaces as $wishlistedPlace) {
        $get = file_get_contents("https://maps.googleapis.com/maps/api/place/details/json?placeid=" . $wishlistedPlace->place_id . "&key=");
        $result = json_decode($get);
        array_push($finalPlaces, $result);
    }

    return response()->json([
        'wishlistedPlaces' => $finalPlaces,
    ], 201);
}

1 Ответ

0 голосов
/ 17 мая 2019

Что если вы просто вернете клиенту список идентификаторов мест, а затем выполните вызовы API в JavaScript?

Или, если вам нужно выполнить некоторую обработку PHP подробных данных, как насчет вызова вашего getWishlist метода через Ajax. Возможно, добавьте возможность возвращать данные порциями (возможно, каждые 5 или 10 мест). Таким образом, вы могли бы показать пользователю приятное сообщение, чтобы сообщить им, что данные загружаются.

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