PHPでAPPのAPIを作成する

9954 ワード

第1部、通信インタフェースの実現
ラベル(スペース区切り):PHP携帯電話バックグラウンドapi通信インタフェースAndy
PHPは世界で最も強力な言語です.
PHPが携帯電話APIを開発する場合、XMLまたはJSONデータ型のデータを返すのが一般的で、ソースデータ(プログラム自体に必要なデータ)に戻る以外にステータスコードを添付する必要があります.以下はパッケージされたデータで、JSON形式で表示されます.
{
    code: 200,
    message: "Success",
    data: [
        {
            username: "   ",
            password: "123456",
            level: "1",
            gold: "0",
            id: "6",
            create_time: "2015-09-26 08:25:31",
            is_active: "1",
            is_admin: "0"
        },
        {
            username: "  ",
            password: "12345",
            level: "1",
            gold: "0",
            id: "8",
            create_time: "0000-00-00 00:00:00",
            is_active: "1",
            is_admin: "0"
        }
    ]
}

XML形式のデータの例を次に示します.

    200
    Success
    
        
           
        123456
        1
        0
        6
        2015-09-26 08:25:31
        1
        0
        
        
          
        12345
        1
        0
        8
        0000-00-00 00:00:00
        1
        0
        
    


また、携帯電話の開発者のデバッグを容易にするために、データ型のデータを直接返すこともできます.
array(3) {
  ["code"]=>
  int(200)
  ["message"]=>
  string(7) "Success"
  ["data"]=>
  array(2) {
    [0]=>
    array(8) {
      ["username"]=>
      string(9) "   "
      ["password"]=>
      string(6) "123456"
      ["level"]=>
      string(1) "1"
      ["gold"]=>
      string(1) "0"
      ["id"]=>
      string(1) "6"
      ["create_time"]=>
      string(19) "2015-09-26 08:25:31"
      ["is_active"]=>
      string(1) "1"
      ["is_admin"]=>
      string(1) "0"
    }
    [1]=>
    array(8) {
      ["username"]=>
      string(6) "  "
      ["password"]=>
      string(5) "12345"
      ["level"]=>
      string(1) "1"
      ["gold"]=>
      string(1) "0"
      ["id"]=>
      string(1) "8"
      ["create_time"]=>
      string(19) "0000-00-00 00:00:00"
      ["is_active"]=>
      string(1) "1"
      ["is_admin"]=>
      string(1) "0"
    }
  }
}

実装方法
携帯電話クライアントがAPIを通じてデータを取得すると、PHPスクリプトはResponseの配列を取得し、この配列に対してencodeを行い、彼らはそれぞれjsonxmlarrayである.この配列は、次のように定義されます.
$result = [
    "code" => 200,
    "message" => "      ",
    "data" => ["key"=>"value", "key"=>"value"]
]

ここで、codeはステータスコードを表し、messageはステータス情報を表し、dataはプログラムロジックに必要なデータである.
どのように設計します
携帯電話側がAPIを呼び出し、プログラム業務論理処理が完了した後、データを返す必要がある場合、通信データをカプセル化する必要がある.パッケージの3種類はREQUESTformatパラメータによって指定され、formart=jsonの場合response_jsonの方法を実行し、同様にresponse_xmlresponse_arrayの方法がある.
呼び出しを容易にするために、Responseクラスを作成して、データをカプセル化し、responseの作業を完了します.
/*              ,          */
class Response{
    public static function response_api($code, $message='', $data=array()){
        //  formart       
        $type = isset($_REQUEST['format'])?$_REQUEST['format']:'';
        switch ($type) {
            case 'json':
                self::response_json($code, $message, $data);
                break;
            case 'xml':
                self::response_xml($code, $message, $data);
                break;
            case 'array':
                echo var_dump(self::grant_array($code, $message, $data));
                break;
            default:
                self::response_json($code, $message, $data);
                
                break;
        }
    }
    
    public static function response_json($code, $message='', $data=array()){
        //  JSON  
        $result = self::gramt_array($code,$message,$data);
        echo json_encode($result);
        exit();
    }
    
    public static function response_xml($code, $message='', $data=array()){
        //  XML  
        $result = self::gramt_array($code,$message,$data);
        $xml = "";
        $xml .= "";
        $xml .= self::xml_encode($result);
        $xml .= ""
        echo $xml;
        exit();
    }
    
    private function xml_encode($arr=array()){
        //  XML,        XML encode  
        $xml = $attr = '';
        foreach($arr as $key=>$value){
            if(is_numberic($key)){
                $key = 'item';
                $attr = " id='{$key}'";
            }
            $xml .= "";
            $xml .= (is_array($value))?self::xml_encode($value):$value;
            $xml .= "{$key}>";
        }
        return $xml;
    }
    
    private function grant_array($code, $message='', $data=array()){
        //       ,      API     
        $result = {
            "code" => $code,
            "message" => $message,
            "data" => $data
        };
        return $result;
    }
    
}

Responseクラスは通信インタフェースのデータパッケージを実現し、responseで指定されたformatに基づいて異なるフォーマットのデータをResponseに柔軟に書き込むことができる.付:完全コードおよび呼び出しインスタンス:

"; $xml .= "
"; $xml .= self::xml_encode($result); $xml .= "
"; echo $xml; exit(); } /* * XML * @param array $array * return string */ private function xml_encode($array=array()){ $xml = $attr = ""; if(!empty($array)){ foreach ($array as $key => $value) { if(is_numeric($key)){ $attr = " id='{$key}'"; $key = "item"; } $xml .= "" ; $xml .= is_array($value) ? self::xml_encode($value) : $value; $xml .="{$key}>
"; } } return $xml; } /* * * @param integer $code * @param string $message * @param array $data * return array */ private function grant_array($code, $message='', $data=array()){ if(!is_numeric($code)){ return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); return $result; } }

呼び出しの例:
connect();


/*
*      
* http://domain/hotgirl/callback.php?format=xml/json
*/
$page = isset($_REQUEST['page'])?$_REQUEST['page']:1;
$page_number = isset($_REQUEST['page_number'])?$_REQUEST['page_number']:2;
$lim_start = ($page-1) * $page_number;
$sql = "SELECT * FROM user WHERE is_active=1 LIMIT ".$lim_start.",".$page_number;
$result = mysql_query($sql, $connect);
if($result && mysql_num_rows($result)>0) {
    while ($row = mysql_fetch_assoc($result)) {
        $rows[] = $row;
    }
}
if(!empty($rows)){
    return Response::api_response(200, 'Success', $rows);
}
else{
    return Response::api_response(403, 'No result from database');
}