0

私はRESTAPIを作成していて、現在いくつかのことをテストしています。データベースに何も見つからない場合にエラー応答を送信させようとしています。

実行中の部分(現在、ブラウザーにURLを入力するだけでテストしているため)は次のとおりです。

    else if ($request->getHttpAccept() === 'xml')  
    {  
        if(isset($data['s']) && isset($data['n'])) {
            $id = $db->getAlcoholIDByNameSize($data['n'], $data['s']);
            $prices = $db->pricesByAlcohol($id);
        }
        if(isset($id)) {
            $resData = array();
            if(!empty($prices)) {
                foreach($prices as $p) {
                    $store = $db->store($p['store']);
                    array_push($resData, array('storeID' => $p['store'], 'store_name' => $store['name'], 'store_gps' => $store['gps'], 'price' => round($p['price'], 2)));
                }
                RestUtils::sendResponse(200, json_encode($resData), 'application/json'); 
            } else {
                RestUtils::sendResponse(204, 'error', 'application/json'); 
            }
        } else {
            RestUtils::sendResponse(204, 'error', 'application/json'); 
        }
        //RestUtils::sendResponse(501, "xml response not implemented", 'application/xml');  
    }  

クエリが$idと$pricesに保存されるものを返す場合、すべてが正常に機能します。ただし、データベースに存在しない場合は、ページを読み込もうとして、前のページに戻ります。次の場所に移動すると、動作を確認できます。

http://easyuniv.com/API/alc/coorsa/2   <-- works
http://easyuniv.com/API/alc/coors/3    <-- works
http://easyuniv.com/API/alc/coorsa/5   <-- doesn't work(or anything else, the two above are the only ones)

これが私のsendResponse関数です:

   public static function sendResponse($status = 200, $body = '', $content_type = 'text/html')  
    {  
        $status_header = 'HTTP/1.1 ' . $status . ' ' . RestUtils::getStatusCodeMessage($status);  
        // set the status  
        header($status_header);  
        // set the content type  
        header('Content-type: ' . $content_type);  

        // pages with body are easy  
        if($body !== '')  
        {  
            $temp = json_decode($body);
            $body = json_encode(array('result' => array('status' => $status, 'message' => RestUtils::getStatusCodeMessage($status)), 'data' => $temp));
            // send the body  
            echo $body;  
            exit;  
        }  
        // we need to create the body if none is passed  
        else  
        {           
            $body = "else".json_encode(array('result' => array('status' => $status, 'message' => RestUtils::getStatusCodeMessage($status))));

            echo $body;  
            exit;  
        }  
    } 

エコーを使用してデバッグを試みましたが、問題を絞り込むことができないようです。助けていただければ幸いです、ありがとう。

4

1 に答える 1

1

問題は、返されるデータベースに適切なデータが見つからない場合HTTP 204、ブラウザに表示するものがまったくないことを示していることです。これはあなたの場合には当てはまりません。

それでも、何も見つからなかったというメッセージを出力したいとします。

204修正するには、コード内の2つのインスタンスを。に置き換える必要があります200

私はあなたのコードを以下を使用して修正テストしました:注、何もそのまま表示されません。表示するメッセージを取得するには、変数に変更204を加えます。200$status_header

<?php
        $status_header = 'HTTP/1.1 204';

        // set the status  
        header($status_header);  
        // set the content type  
        header('Content-type: text/html');

        echo "Can you see me???";
?>

注:これをテストするときは、常にタブを閉じて、呼び出しごとに新しいタブを使用してください。そうしないと、説明したように、前の呼び出しからのデータが読み込まれているように見えます。

于 2012-12-19T21:42:32.850 に答える