Вызовите GET в Rest Api и отправьте POST, чтобы предоставить информацию Rest Api.

В настоящее время я использую Symfony с FosRestBundle для создания API.

В symfony я хотел бы получить запрос от клиента, чтобы вернуть некоторую информацию. (Так что метод получения).

Это мой код, который разрешает связь между API и клиентом.

Сторона API:

public function getPropertiesAction(Request $request){

    $properties = $this->getDoctrine()->getManager()->getRepository('ApiBundle:Achats')->findAll();

    if(null == $properties){
        throw $this->createNotFoundException();
    }

    $data =  findPropertiesInside($properties, $request);

    return $data;
}

Сторона клиента :

angular.module('googleMapApp')
    .service('PropertiesData', function ($http) {
        this.fetch = function(url, polygone, callback, errorCallback) {
            $http.post(url,{data: polygone}).then(callback,errorCallback);
        };
});

Поэтому, когда я это делаю, API возвращает ошибку 405 (метод не разрешен)

Исключение из Symfomy: маршрут не найден для "POST /api/properties": метод не разрешен (разрешить: GET , ГОЛОВА)

Есть ли способ отправить информацию в формате json от клиента к API, и API вернет хорошие свойства?


person Robinson    schedule 29.03.2016    source источник


Ответы (1)


Вы не можете передать тело запроса при использовании HTTP GET. Вы должны передать данные в URL-адресе, используя либо путь, либо строку запроса.

Измените свою клиентскую сторону на $http.get(urlWithData).then...

person fikkatra    schedule 29.03.2016
comment
Моя проблема в том, что мой объект данных представляет собой сложный json, поэтому URL/данные будут странными, не так ли? - person Robinson; 29.03.2016
comment
да, это классическая проблема. Глядя на код вашего сервера, GET кажется наиболее подходящим, потому что вы ничего не меняете (например, никакие данные в БД не изменяются). Но если у вас сложный поиск и вам нужно передать много данных для выполнения запроса (больше данных, чем простой фильтр и некоторые атрибуты разбиения на страницы), вы можете решить использовать POST. В этом случае вам нужно будет изменить свой сервер и настроить метод API для приема POST. Обратите внимание, что ваши пользователи не смогут добавить в закладки конкретный поиск, а обновление его путем обновления страницы будет обременительным, поэтому внимательно подумайте, прежде чем использовать POST. - person fikkatra; 29.03.2016