Я заметил, что Laravel имеет опрятный метод Request::wantsJson
- я предполагаю, что когда я делаю запрос, я могу передать информацию, чтобы запросить ответ JSON, но как мне сделайте это и какие критерии использует Laravel для определения того, запрашивает ли запрос JSON?
Как Laravel знает Request:: needsJson - это запрос для JSON?
Ответ 1
Он использует заголовок Accept
, отправленный клиентом, чтобы определить, хочет ли он ответ JSON.
Посмотрите код:
public function wantsJson() {
$acceptable = $this->getAcceptableContentTypes();
return isset($acceptable[0]) && $acceptable[0] == 'application/json';
}
Итак, если клиент отправляет запрос с первым допустимым типом контента на application/json
, тогда метод вернет true.
Как для запроса JSON, вы должны соответствующим образом установить заголовок Accept
, это зависит от того, какую библиотеку вы используете для запроса маршрута, вот несколько примеров с библиотеками, которые я знаю:
Guzzle (PHP):
GuzzleHttp\get("http://laravel/route", ["headers" => ["Accept" => "application/json"]]);
cURL (PHP):
$curl = curl_init();
curl_setopt_array($curl, [CURLOPT_URL => "http://laravel/route", CURLOPT_HTTPHEADER => ["Accept" => "application/json"], CURLOPT_RETURNTRANSFER => true]);
curl_exec($curl);
Requests (Python):
requests.get("http://laravel/route", headers={"Accept":"application/json"})