Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-App-Schnittstelle für serverseitige Entwicklung

PHP-App-Schnittstelle für serverseitige Entwicklung

不言
不言Original
2018-04-26 14:42:558834Durchsuche

Dieser Artikel stellt die Entwicklung der APP-Schnittstelle auf dem PHP-Server vor. Jetzt können interessierte Freunde einen Blick darauf werfen


Einführung in APP-Schnittstelle


Was ist eine App-Schnittstelle? Die App-Schnittstelle ist ein in einem serverseitigen Programm wie PHP geschriebenes Skript, mit dem der App-Client Daten anfordern und abrufen kann. Beispielsweise muss die Homepage einer Store-App einige Produktlisten enthalten. Wenn Sie also die App öffnen, fordert die in der App gekapselte Homepage tatsächlich eine Remote-PHP-Datei an, z. B. http://www.example.com/index. php, um die Produktlistendaten zu erhalten, die auf der Homepage angezeigt werden müssen. Wenn der Front-End-Ingenieur diese Daten erhält, zeigt er den Inhalt entsprechend einem bestimmten Design an.
Dies ist der Zweck der Schnittstelle. Eine App muss normalerweise auf mehrere PHP-Schnittstellen zugreifen, um unterschiedliche Daten zu erhalten. Lassen Sie uns ausführlich über den Schnittstellenimplementierungsprozess und einige Kerntechnologien sprechen, die zur Implementierung der Schnittstelle erforderlich sind.


2. PHP-Schnittstellenkenntnisse

JSON- und XML-Kapselung der Kommunikationsschnittstelle

response.class.php

<?php/**
 *description 用于返回指定数据格式的类
 *@param $code [int] 返回的状态码
 *@param $message [string] 返回的状态信息
 *@param $data [array] 需要返回的数据
 *
 */class Response{
    public function json($code,$message,$data){
        $result = array(                "code" => $code,                "message" => $message,                "data" => $data
            );        return json_encode($result);
    }    public function xml($code,$message,$data){
        $result = array(                "code" => $code,                "message" => $message,                "data" => $data
            );
        header(&#39;Content-Type:text/xml&#39;);        $xml = "<?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?>\n";        $xml .= "<root>";        $xml .= self::encodeXml($result);        $xml .= "</root>";        return $xml;
    }    /**
     *将数据解析为XML字符串
     */

    public static function encodeXml($data){
        $attr = $xml = "";        foreach($data as $key => $value){                if(is_numeric($key)){                    $attr = " id=&#39;{$key}&#39;";                    $key = "item";
                }                $xml .= "<{$key}{$attr}>";                $xml .= is_array($value)?self::encodeXml($value):$value;                $xml .= "</$key>";
        }        return $xml;
    }
}

response.class .php ist die einfachste Klasse, die Daten im JSON- oder XML-Format zurückgibt.
Der Schnittstellendateicode ist unten aufgeführt:
returndata.php

<?phprequire "response.class.php";    //引入返回信息类//准备返回数据$code = 200;$message = "信息请求成功";$data = array(        "name" => "ruanwnewu",        "sex"  => "1",        "age"  => "28",        "exp" => array(                "2012" => "北京瑞泰新",                "2013" => "兄弟连",                "2014" => "木蚂蚁科技"
            )
    );//实例化response类$response = new Response;//返回数据echo $response -> json($code,$message,$data);

Tatsächliche Entwicklungsbeispiele

  • Entwickeln Sie drei Schnittstellen (Anmeldung, Registrierung, Datei-Upload), um jeweils die entsprechenden Funktionen auszuführen

  • Da ich keine APP-Entwicklung mache, habe ich es auf dem getestet Tatsächliche Schnittstelle Verwenden Sie während des Vorgangs die RESTClient-Erweiterung des Firefox-Browsers, um die APP zu simulieren, die Dienste anfordert und Daten empfängt
    (1) Anmelde- und Registrierungsschnittstellen schreiben
    Geben Sie den Code direkt ein:

<?phprequire ("../connect_db.php");$action = $_REQUEST["action"];$conn = db_connect();
mysql_query("set names &#39;utf8&#39;");
mysql_select_db("FECG");switch ($action){    case &#39;login&#39;:
       login();       break;    case &#39;register&#39;:
       register();       break;    case &#39;upload&#39;:
       upload();       break;    default:       break;
}//登录接口function login(){
    $account_name = $_POST["username"];    $password = $_POST["password"];    $result = mysql_query("SELECT * FROM app_account WHERE account_name=&#39;".$account_name."&#39;");    if (mysql_num_rows($result) > 0){        $row = mysql_fetch_array($result);        $salt = $row["salt"];        $new_password = md5($password."".$salt);        if ($new_password == $row["password"]){            //登录成功
            $current_time = new DateTime();            $login_time = $current_time -> format(&#39;Y-m-d H:i:s&#39;);            $result =  mysql_query("UPDATE app_account SET last_lgin_time=&#39;".$login_time."&#39; WHERE account_name=&#39;".$row[&#39;account_name&#39;]."&#39;");            $array = array();            $array["account_id"] = $row["account_id"];            $array["account_name"] = $row["account_name"];            $array["create_time"] = $row["creat_time"];            $json = json_encode(array(                  "resultCode"=>200,                  "message"=>"login successed!",                  "data"=>$array));            echo($json);
        }else{            $json = json_encode(array(                  "resultCode"=>500,                  "message"=>"The password is wrong!please try again."
                  ));            echo($json);
         }
    }else{        //登录失败
        $json = json_encode(array(              "resultCode"=>500,              "message"=>"please register!"
              ));        echo($json);
    }
}//注册接口function register(){
    $account_name = $_POST["username"];    $password = $_POST["password"];    $result = mysql_query("select * from app_account where account_name=&#39;".$account_name."&#39;");    //查询失败
    if (!$result){        $json = json_encode(array(              "resultCode"=>500,              "message"=>"select failed!"
              ));        echo($json);
    }    //用户名已经注册
    if (mysql_num_rows($result) > 0){        $json = json_encode(array(              "resultCode"=>500,              "message"=>"register failed!"
              ));        echo($json);
    }else{        //插入记录到数据库中
        $account_id = uniqid();        $salt = uniqid();        $new_password = md5($password."".$salt);        $current_time = new DateTime();        $create_time = $current_time -> format(&#39;Y-m-d H:i:s&#39;);        $last_login_time = $create_time;        $result = mysql_query("insert into app_account(account_id,account_name,password,salt,creat_time,last_lgin_time) values(&#39;".$account_id."&#39;, &#39;".$account_name."&#39;, &#39;".$new_password."&#39;, &#39;".$salt."&#39;, &#39;".$create_time."&#39;, &#39;".$last_login_time."&#39;)");        $user_id = uniqid();        $result1 = mysql_query("INSERT INTO app_user(user_id,username,account_id) VALUES(&#39;".$user_id."&#39;, &#39;".$account_name."&#39;, &#39;".$account_id."&#39;)");        if ($result){           $json = json_encode(array(                 "resultCode"=>200,                 "message"=>"register successed!"
                 ));           echo($json);
        }
    }
}//文件上传接口function upload(){}?>

RESTClient-Test:
PHP-App-Schnittstelle für serverseitige Entwicklung
(Registrierung ist ein ähnlicher Vorgang)
(2) Datei-Upload
Da es sich um eine Simulation handelt und die Datei-Upload-Schnittstelle beteiligt ist Datei-Upload, RESTClient kann es nicht simulieren. Schreiben Sie also einen separaten Client uploadClient.html, um den Datei-Upload zu simulieren.
uploadClient.html

<!DOCTYPE html><html><head>
    <title>文件上传</title>
    <meta charset="UTF-8" /></head><body><form action="upload.php" method="post" enctype="multipart/form-data" >
    选择文件:<input type="file" name="filename" />
    </br>
    用户ID:<input type="text" name="userid" /></br>
    心率:<input type="text" name="rate" /></br>
    <input type="submit" value="提交"></form></body></html>

Server, der die Dateischnittstelle upload.php empfängt
upload.php

<?phprequire ("../connect_db.php");$conn = db_connect();
mysql_query("set names &#39;utf8&#39;");
mysql_select_db("FECG");$file_name = $_POST["filename"];$userid = $_POST["userid"];$heart_rate = $_POST["rate"];if ($_FILES[&#39;filename&#39;][&#39;name&#39;] != NULL){    if ($_FILES[&#39;filename&#39;][&#39;error&#39;]){        $data = array(            "resultCode"=>1,            "message"=>"失败,上传文件出错!"
        );        echo json_encode($data);
    }    else{        //获取文件后缀名
        $file_extension = substr(strrchr($_FILES[&#39;filename&#39;][&#39;name&#39;], &#39;.&#39;), 1);        //判断文件夹是否存在
        $path = "/var/www/html/FECG/fecg_segment_data/".$userid;        if (!file_exists($path)){            //创建以用户名命名的文件夹
            if(mkdir ($path)){               $data = array("message"=>"ok");               echo json_encode($data);}
        }        //对上传文件进行命名
        $file_path = &#39;/var/www/html/FECG/fecg_segment_data/&#39;.$userid.&#39;/&#39;.date("YmdHis").".".$file_extension;        if (is_uploaded_file($_FILES[&#39;filename&#39;][&#39;tmp_name&#39;])){            $result = move_uploaded_file($_FILES[&#39;filename&#39;][&#39;tmp_name&#39;], $file_path);            if ($result){                //文件上传成功,进行第二步更新数据库
                $result = mysql_query("SELECT * FROM app_account WHERE account_name=&#39;".$userid."&#39;");                if (!$result){                     $num = 123;                     $data = array(                        "resultCode"=>2,                        "message"=>"userid",                        "data"=>$userid
                     );                     echo json_encode($data);
                }                $row = mysql_fetch_array($result, MYSQL_ASSOC);                $account_id = $row["account_id"];                $result1 = mysql_query("SELECT * FROM app_user WHERE account_id=&#39;".$account_id."&#39;");                $row1 = mysql_fetch_array($result1, MYSQL_ASSOC);                $user_id = $row1["user_id"];                $user_name = $row1["username"];                $ecg_segment_id = uniqid();                $channel = 3;                $current_time = new DateTime();                $create_time = $current_time -> format(&#39;Y-m-d H:i:s&#39;);                $result = mysql_query("INSERT INTO ecg_segment(ecg_segment_id,channel,heart_rate,ecg_url,user_name,user_id)
                                      VALUES(&#39;".$ecg_segment_id."&#39;, &#39;".$channel."&#39;, &#39;".$heart_rate."&#39;, &#39;".$file_path."&#39;, &#39;".$user_name."&#39;, &#39;".$user_id."&#39;)");                $task_id = uniqid();                $server_analysis = "异常";                $result1 = mysql_query("INSERT INTO task(task_id,creat_time,server_analysis,ecg_segment_id)
                                      VALUES(&#39;".$task_id."&#39;, &#39;".$create_time."&#39;, &#39;".$server_analysis."&#39;, &#39;".$ecg_segment_id."&#39;)");                if ($result){                    $data = array(                        "resultCode"=>2,                        "message"=>"文件上传成功!"
                        );                    echo json_encode($data);
                }                else{                    $data = array(                        "resultCode"=>3,                        "message"=>"服务器错误!"
                        );                    echo json_encode($data);
                }
            }            else{                $data = array(                    "resultCode"=>4,                    "message"=>"uploaded failed!"
                    );                echo json_encode($data);
            }
        }        else{            $data = array(                "resultCode"=>5,                "message"=>"文件上传失败!"
            );            echo json_encode($data);
        }
    }
}else{    $data = array(         "resultCode"=>300,         "message"=>"文件名不能为空!"
         );    echo json_encode($data);
}?>

(Die oben genannten Codes wurden alle gemäß meinen Bedürfnissen entwickelt Projektschnittstelle)

Verwandte Empfehlungen:

Das klarste grafische Tutorial zum Aufbau einer PHP-Serverumgebung

Qiniu Cloud Storage – PILI How to Live-Broadcast-PHP-Server-SDK-Code in Ihr eigenes Projekt einführen?

Erweiterte Version des Kommunikationsprozessdesigns für mobile Endgeräte und PHP-Serverschnittstellen


Das obige ist der detaillierte Inhalt vonPHP-App-Schnittstelle für serverseitige Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn