PHPでAPPのAPIを作成する
9954 ワード
第1部、通信インタフェースの実現
ラベル(スペース区切り):PHP携帯電話バックグラウンドapi通信インタフェースAndy
PHPは世界で最も強力な言語です.
PHPが携帯電話APIを開発する場合、XMLまたはJSONデータ型のデータを返すのが一般的で、ソースデータ(プログラム自体に必要なデータ)に戻る以外にステータスコードを添付する必要があります.以下はパッケージされたデータで、JSON形式で表示されます.
XML形式のデータの例を次に示します.
また、携帯電話の開発者のデバッグを容易にするために、データ型のデータを直接返すこともできます.
実装方法
携帯電話クライアントがAPIを通じてデータを取得すると、PHPスクリプトは
ここで、
どのように設計します
携帯電話側がAPIを呼び出し、プログラム業務論理処理が完了した後、データを返す必要がある場合、通信データをカプセル化する必要がある.パッケージの3種類は
呼び出しを容易にするために、
Responseクラスは通信インタフェースのデータパッケージを実現し、
呼び出しの例:
ラベル(スペース区切り):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
を行い、彼らはそれぞれjson
、xml
とarray
である.この配列は、次のように定義されます.$result = [
"code" => 200,
"message" => " ",
"data" => ["key"=>"value", "key"=>"value"]
]
ここで、
code
はステータスコードを表し、message
はステータス情報を表し、data
はプログラムロジックに必要なデータである.どのように設計します
携帯電話側がAPIを呼び出し、プログラム業務論理処理が完了した後、データを返す必要がある場合、通信データをカプセル化する必要がある.パッケージの3種類は
REQUEST
のformat
パラメータによって指定され、formart=json
の場合response_json
の方法を実行し、同様にresponse_xml
とresponse_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');
}