Как сделать запрос через REST API и получить ответ?

Всё что касается построения API
Ответить
wertex
Сообщения: 5
Зарегистрирован: 2015.01.05, 23:49

Как сделать запрос через REST API и получить ответ?

Сообщение wertex »

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

запрос должен выглядеть вот так

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Token " \
-H "X-Secret: " \
-d '[ "тут та инфа, которую отправляем" ]' \
https://ru.ru
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Как сделать запрос через REST API и получить ответ?

Сообщение girmate »

Вот 300 раз слышал про этот REST API. Можно в двух словах, когда это необходимо?
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как сделать запрос через REST API и получить ответ?

Сообщение rugabarbo »

girmate писал(а):Вот 300 раз слышал про этот REST API. Можно в двух словах, когда это необходимо?
Именно REST API?

Когда есть желание стандартизировать общение клиентов с сервером и вместо GET-запросов в формате ...&method=delete&id=7 слать нормальные DELETE-запросы в формате ...&id=7 без указания всяких методов.

То есть вы уже на уровне заголовка решаете, какую операцию будет делать запрос: GET (чтение), POST (создание), PUT (обновление) или DELETE (удаление).

Таким образом, REST - это дополнительный уровень стандартизации, который избавляет вас от головной боли на уровне проектирования запросов к API.

Ну и всяческие коды ответов, соответственно, тоже стандартизированы (ОК, не ОК, таймаут, Not Found, конфликт, кривые параметры и т.п.)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Как сделать запрос через REST API и получить ответ?

Сообщение girmate »

Вот именно в таком формате я и хотел получить ответ: кратко и по сути. В интернете смотрел, но не особо просветлился. Спасибо!
Осторожно! Вы общаетесь с новичком ;)
wertex
Сообщения: 5
Зарегистрирован: 2015.01.05, 23:49

Re: Как сделать запрос через REST API и получить ответ?

Сообщение wertex »

Спасибо. Запрос отправляет, только вот ошибку никак не могу поправить:

Код: Выделить всё

        $data = ['замятина 42-3'];

        $client = new Client();
        $response = $client->createRequest()
            ->setFormat(Client::FORMAT_JSON)
            ->setMethod('post')
            ->setUrl('https://dadata.ru/api/v2/clean/address')

            ->setHeaders(['Content-Type' => 'application/json'])
            ->addHeaders(['Authorization' => ''])
            ->addHeaders(['X-Secret' => ''])

            ->setData(['data' =>$data])
            ->send();
 
Ответ

Код: Выделить всё

"data":["Expected a list of items but got type \"dict\"." 
Если

Код: Выделить всё

$data = ['замятина 38-3']; 
то ответ

Код: Выделить всё

"data":["Expected a list of items but got type \"unicode\"."]
Где я не правильно делаю?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как сделать запрос через REST API и получить ответ?

Сообщение ElisDN »

Код: Выделить всё

$data = ['поле' => 'замятина 38-3']; 
wertex
Сообщения: 5
Зарегистрирован: 2015.01.05, 23:49

Re: Как сделать запрос через REST API и получить ответ?

Сообщение wertex »

Тогда пишет

data":["Expected a list of items but got type \"dict\"."]}
wertex
Сообщения: 5
Зарегистрирован: 2015.01.05, 23:49

Re: Как сделать запрос через REST API и получить ответ?

Сообщение wertex »

Как оказалось у них не точно представлена информация по пользованию их же API.
Вот конечный вариант, после него возвращается корректный ответ.
Может быть кому то будет полезно. Это для сервиса от http://dadata.ru

Код: Выделить всё

    $data = array(array("екатеринбург малышева 31а"));
        $client = new Client();
        $response = $client->createRequest()
            ->setFormat(Client::FORMAT_JSON)
            ->setMethod('post')
            ->setUrl('https://dadata.ru/api/v2/clean/address')
            ->setHeaders(['Content-Type' => 'application/json'])
            ->addHeaders(['Authorization' => ''])
            ->addHeaders(['X-Secret' => ''])
            ->setData(['data' => $data, "structure" => array("ADDRESS")])
            ->send();
Ответить