При работе со сторонним API я должен создать класс, который будет строить запросы на основе параметров вместо жесткого их кодирования? - PullRequest
0 голосов
/ 29 сентября 2019

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

Я имею в виду следующее: следующая конечная точка /lol/match/v4/matchlists/by-account/{encryptedAccountId} возвращает список совпадений, сыгранных пользователем, и может содержать до 7 параметров запроса - champion, queue, season, endTime, beginTime, endIndex and beginIndex.

И вот какЯ получаю этот список совпадений:

public function getSummoner($summonerName){

    $apiKey = env("RIOT_API_KEY");
    $region = env("EUW");

    $getSummonerInfo = file_get_contents($region . "/lol/summoner/v4/summoners/by-name/" . $summonerName . "?api_key=" . $apiKey);
    $summonerInfo = json_decode($getSummonerInfo);

    $getSummonerLeague = file_get_contents($region . "/lol/league/v4/entries/by-summoner/" . $summonerInfo->id . "?api_key=" . $apiKey);
    $summonerLeague = json_decode($getSummonerLeague);

    $getSummonerMatches = file_get_contents($region . "/lol/match/v4/matchlists/by-account/" . $summonerInfo->accountId . "?beginIndex=0&endIndex=10&api_key=" . $apiKey);
    $summonerMatches = json_decode($getSummonerMatches);

    return response()->json([
        'summonerInfo' => $summonerInfo,
        'summonerLeague' => $summonerLeague,
        'summonerMatches' => $summonerMatches,
    ], 201);

}

Как видите, при построении конечных точек, к которым я хочу сделать запрос GET, я просто жестко кодирую все.

$region . "/lol/match/v4/matchlists/by-account/" . $summonerInfo->accountId . "?beginIndex=0&endIndex=10&api_key=" . $apiKey

Эта конечная точка можетиметь до 7 необязательных параметров запроса, однако я использую только 2 из них beginIndex and endIndex.Если бы мне пришлось добавить дополнительный параметр, я бы пришел сюда и изменил код вручную.Также, если бы я попытался сделать GET-запрос к той же конечной точке, но с использованием других необязательных параметров запроса в другой функции, мне пришлось бы скопировать этот код и просто немного его изменить, что приведет к дублированию кода.

Вот почему мне интересно, подойдет ли создание класса, который принимает некоторые входные данные, а затем возвращает построенный запрос?На мой взгляд, это удалит много дублирующих запросов и значительно сократит мой код.Кроме того, если бы я создал такой класс, это означало бы, что в некотором смысле я создал библиотеку для этого конкретного стороннего API?

Так ли мой нынешний способ сделать запросы GET некорректными иКак вы думаете, стоит ли создавать класс, который будет строить запросы на основе некоторого ввода?Спасибо, что нашли время, чтобы прочитать это.

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