1

AbstractRestfulControllerを使おうとしています。コントローラクラスを作成します。

class MyController extends AbstractRestfulController{

    public function getList(){
        $data = array();

        return new JsonModel(array(
            'data' => $data,
        ));
    }

    public function get($id){
        $data = array();

        return new JsonModel(array(
            'data' => $data,
        ));
    }

    public function create($data){
        $data = array();

        return new JsonModel(array(
            'data' => $data,
        ));
    }

    public function update($id, $data){
        $data = array();

        return new JsonModel(array(
            'data' => $data,
        ));
    }

    public function delete($id){
        $data = array();

        return new JsonModel(array(
            'data' => $data,
        ));
    }

}

およびルーティング:

return array(
    'router' => array(
        'routes' => array(
            'mylink' => array(
                'type'    => 'Segment',
                'options' => array(
                    'route'    => '/mylink[/:id]',
                    'constraints' => array(
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'MyModule\Controller\My',
                    ),
                ),
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'MyModule\Controller\My' => 'MyModule\Controller\MyController',
        ),
    ),
    'view_manager' => array(
        'strategies' => array(
            'ViewJsonStrategy',
        ),
    ),
);

しかし、ユーザーが間違ったメソッドや間違ったIDなどを呼び出すとどうなりますか?自分で処理したいです。どうやってするの?

4

1 に答える 1

3

APIは、要求された形式(json、xmlなど)で応答を返す必要があります。通常は、問題を説明するエラーコード/メッセージと、適切なhttp応答コードが含まれます。あなたのAPIの消費者に期待される応答がどうなるかを伝えるのはあなた次第ですが、彼らがそれを間違えたときにそれを処理するのは彼ら次第です。

その観点からは、応答を設定し、モデルに関連情報を入力して返すという単純なケースです。一般的な応答は次のようになります...

public function get($id)
{
    // some processing to find id ...

    // no id found
    if (!$found) {
        // set 404 Not Found response
        $this->getResponse()->setStatusCode(404);
        // return message to client
        return new JsonModel(array(
            'error' => 404,
            'reason' => sprint_f('Requested id "%s" not found', $id'),
        ));
    }
}

明らかに、他のメソッドについても同じことを行い、適切なHTTP応答コードを使用してみてください

于 2013-03-06T09:57:21.527 に答える