Тонкие выходы JSON - PullRequest
       75

Тонкие выходы JSON

29 голосов
/ 24 июля 2011

Я использую среду Slim с PHP для создания RESTful API для моего приложения. Тем не менее, я предположил, что у фреймворка будет какой-то способ создания более простых выходных данных JSON, а не просто exit($jsonEncodedVariable);.

Я что-то упустил в рамках или мне нужно использовать json_encode() ... exit($json) ... для каждого метода?

Все данные извлекаются из базы данных MySQL и затем помещаются в массив JSON в зависимости от того, какой запрос REST был вызван.

Например, если запрошено /api/posts/all, я exit() буду массивом JSON всех сообщений, каждое из которых имеет свой собственный ключ, "value" : key.

У меня вопрос: есть ли простой способ, используя тонкий фреймворк, для exit() использования кода JSON вместо его вывода в виде простого текста?

Ответы [ 17 ]

1 голос
/ 04 октября 2012

Мое исправление добавляло "выход"; в конце распечатки json моему серверу разработки было все равно, но мой живой сервер не вызывал событие завершения json Мне не нужно было добавлять заголовки или использовать json_encode.

0 голосов
/ 08 апреля 2018

Вот как я это делаю в тонкой версии 2

$app->response->headers->set("Content-Type", 'application/json');
return $app->response->write(json_encode([
    'status' => true,
    'message' => 'Your message'
]));
0 голосов
/ 02 февраля 2017
Заголовок

(«Content-Type: application / json»); echo json_encode ($ data);

0 голосов
/ 22 июля 2016

Вы можете использовать в slim3, пользовательский метод Slim для объекта Response с Json ($ data, $ status, $ encodingOptions)

$app->get('/hello/{name}', function ($request, $response, $args) {
    $data['msg']='Hello '.$request->getAttribute('name');
    $newResponse = $response->withJson($data);
});

Для получения дополнительной информации читайте здесь.

0 голосов
/ 14 июня 2016

[ДО]: Content-Type text / html; кодировка = UTF-8

Не работает с SOAPUI JSON: (

$this->get('get_all', function ($req, $res, $args) {
    $um = new UserModel();

    return $res
       ->withHeader('Content-Type', 'application/json')
       ->getBody()
       ->write(
        json_encode(
            $um->get_all()
        )
    );
});

[ПОСЛЕ]: приложение типа контента / json; charset = utf-8

Работа с SOAPUI JSON;)

$this->get('get_all', function ($req, $res, $args) {
    $um = new UserModel();

    return $res
        ->withHeader('Content-type', 'application/json;charset=utf-8')
        ->withJson($um->get_all());
0 голосов
/ 20 июля 2015

Я использую https://github.com/entomb/slim-json-api для моего API, написанного на Slim 2, чтобы включить JSON-ответ.Код инициализации выглядит примерно так:

function APIRequests () {
    $app = \Slim\Slim::getInstance();
    $app->view(new \JsonApiView());
    $app->add(new \JsonApiMiddleware());
}

$app->group('/api', 'APIRequests', function () use ($app) {
    $app->get('/areas/:id', function ($id) use ($app) {
       $app->render(200, Area::find($id));
    });
});

Мне очень нравится уровень абстракции с использованием промежуточного программного обеспечения и группирования маршрутов, что позволяет легко применять разные типы ответов к различным областям приложения.

0 голосов
/ 28 апреля 2015

Использование Slim JSON API https://coderwall.com/p/otcphg/create-a-json-restfull-api-using-slim-framework. С ним можно обрабатывать вывод JSON.

...