Как настроить метод записи так, чтобы он мог принимать только закодированный запрос URL? - PullRequest
0 голосов
/ 27 декабря 2018

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

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Поскольку вы используете Slim в качестве основы для своего API, самый простой способ - просто построить маршрут GET с определенными желаемыми параметрами URL:

$app->get('/users/filter/{param1}/{param2}/{param3}', function (Request $request, Response $response) {
    // Route actions here
});

В своей документации обязательно сообщитепотребители этого API - это конечная точка GET, поэтому не следует создавать тело POST;скорее, параметры, которые вы наметили в URL, должны использоваться для передачи данных клиента в API.

Если вы намереваетесь использовать POST-маршрут только с параметрами URL, то вы также можете вызвать ответназад, если маршрут обнаруживает входящее тело POST:

$app->post('/users/filter/{param1}/{param2}/{param3}', function (Request $request, Response $response) {

    $postBody = $request->getParsedBody();

    if (is_array($postBody)) {

        $denyMsg = "This endpoint does not accept POST body as a means to transmit data; please refer to the API documentation for proper usage.";
        $denyResponse = $response->withJson($denyMsg, $status = null, $encodingOptions = 0);

        return $profileData;

    }
});
0 голосов
/ 29 декабря 2018

Нет заранее запрограммированного способа для этого - не существует метода Slim или php, который бы окончательно проверял, не закодирована ли ваша строка.Что вы можете сделать, так это внедрить Slim Middleware на свой маршрут.

<?php
$app = new \Slim\App();

$mw = function ($request, $response, $next) {
    if ( urlencode(urldecode($data)) === $data){
      $response = $next($request, $response);
    } else {
      $response = ... // throw error
    }

    return $response;
};

$app->get('/', function ($request, $response, $args) { // Your route
    $response->getBody()->write(' Hello ');

    return $response;
})->add($mw); // chained middleware

$app->run();

Обсуждение: Проверка, является ли строка URL-адресом, закодированным в PHP

Промежуточное программное обеспечение: https://www.slimframework.com/docs/v3/concepts/middleware.html

...