PHP
目錄
1舷嗡、PHP 語言的介紹(面向?qū)ο筇瑂ession,MVC 模式)
2、RESTful API 介紹及通信協(xié)議制定
3狸棍、服務(wù)端結(jié)構(gòu)介紹
4、接口程序的介紹
參考資料
《Android 和 PHP 開發(fā)最佳實(shí)踐》
《理解 RESTful 架構(gòu)》 阮一峰
PHP 語言介紹
PHP(外文名:PHP: Hypertext Preprocessor味悄,中文名:“超文本預(yù)處理器”)是一種通用開源腳本語言草戈。語法吸收了C語言、Java和Perl的特點(diǎn)侍瑟,利于學(xué)習(xí)唐片,使用廣泛,主要適用于Web開發(fā)領(lǐng)域涨颜。PHP 獨(dú)特的語法混合了C费韭、Java、Perl以及PHP自創(chuàng)的語法庭瑰。它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁星持。用PHP做出的動態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)文檔中去執(zhí)行弹灭,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多督暂;PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行穷吮,使代碼運(yùn)行更快逻翁。
1、用于后臺腳本編程捡鱼,即以命令行(CLI)的方式運(yùn)行
2八回、用于網(wǎng)絡(luò)編程,即以 mod_php 或 fastCGI 的方式執(zhí)行
什么是 CLI
PHP 的命令行模式驾诈,用作 PHP 開發(fā)外殼應(yīng)用
什么是 mod_php
簡單來說缠诅,PHP 使用這種模式讓 PHP 代碼可以在 Apache 服務(wù)器上面運(yùn)行。
什么是 fastCGI
CGI(Common Gateway Interface) 是一種外部應(yīng)用程序(CGI程序)與Web服務(wù)器的協(xié)議乍迄,CGI是為了保證Server傳遞過來的數(shù)據(jù)是標(biāo)準(zhǔn)格式滴铅,
CGI(Common Gateway Interface) 是WWW技術(shù)中最重要的技術(shù)之一,有著不可替代的重要地位就乓。
CGI全稱是“公共網(wǎng)關(guān)接口”(Common Gateway Interface)汉匙,HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上生蚁。
fastCGI 則可以看作是升級版的噩翠、常駐(long-live)的CGI。
PHP 面向?qū)ο箝_發(fā)
面向?qū)ο?/h3>
PHP 語言的面向?qū)ο缶幊趟悸放c其他語言都是非常相似的邦投,對象(Object)伤锚、類(Class)、接口(Interface)以及 MVC 三層封裝的用法都大同小異志衣。
1屯援、抽象性
對象是面向?qū)ο缶幊痰幕驹孛兔牵瑢ο罂梢允俏覀冄芯康娜魏卧兀梢允蔷唧w的物品狞洋,也可以是抽象的事物弯淘。比如后臺管理系統(tǒng),管理員是一個(gè)對象吉懊,后臺權(quán)限也是一個(gè)對象庐橙。
2、繼承性
繼承性是面向?qū)ο笾凶罨A(chǔ)借嗽、最重要的特點(diǎn)之一态鳖,也正是因?yàn)閷ο蟮睦^承性才衍生出了“抽象”和“封裝”等面向?qū)ο蟮脑O(shè)計(jì)方法。 PHP 語言中同樣使用私有(private)恶导、保護(hù)(protected)浆竭、公共(public)關(guān)鍵字來設(shè)定類、屬性惨寿、方法的權(quán)限兆蕉。
3、多態(tài)性
多態(tài)性泛指相同的操作或函數(shù)缤沦、過程中可作用于多種類型的對象上并獲得不同的結(jié)果虎韵。這個(gè)特性進(jìn)一步增強(qiáng)了面向?qū)ο蟮木幊趟枷氲撵`活與重用。
class a{
function test($i){ // $i可以是任何類型的變量
print_r $i;
}
}
上例缸废,可以看出由于PHP是弱類型語言包蓝,所以$i可以是任何類型的變量,這樣一個(gè)函數(shù)就可以實(shí)現(xiàn)如java等強(qiáng)類型語言中靠改變參數(shù)類型重載方法的多態(tài)形式企量。
PHP 中的 Session
常說 “不理解會話(session)的概念就等于不懂得 PHP 網(wǎng)絡(luò)編程”测萎。當(dāng)然,這里說的 PHP 用于網(wǎng)絡(luò)編程的時(shí)候届巩,因?yàn)?HTTP 協(xié)議是無狀態(tài)的硅瞧,所以每次請求結(jié)束之后,變量和資源就回收了恕汇,那么我們?nèi)绾伪4嬉恍俺志谩钡男畔⒛赝筮螅勘热纾河脩舻卿浿螅到y(tǒng)需要把用戶登錄的信息保存下來瘾英,在整個(gè)應(yīng)用或者站點(diǎn)里面使用枣接。如果使用數(shù)據(jù)庫來保存,就會很麻煩而且浪費(fèi)資源缺谴,而且又多了很多讀寫操作但惶,還要定期清理。而且大部分屬于臨時(shí)數(shù)據(jù),用戶退出登錄就沒有了膀曾,為了解決這些問題县爬,PHP提供了會話模塊,來保存這些臨時(shí)的用戶數(shù)據(jù)添谊。
PHP的session機(jī)制不復(fù)雜财喳,客戶端只需要保存一個(gè)Session ID(會話ID),每次會話請求都會把這個(gè) Session ID 傳給服務(wù)端碉钠,并獲取服務(wù)端接口處理完數(shù)據(jù)纲缓。
PHP 默認(rèn)的會話存儲方法是文件存儲卷拘,數(shù)據(jù)都會被保存到服務(wù)器本地的 session.save_path 參數(shù)設(shè)定的目錄中喊废。
最簡單的具體的使用方法:
首先調(diào)用 session_start 方法開啟一個(gè)新的 session。然后直接使用 PHP 預(yù)定義變量 $_ SESSION 來進(jìn)行讀取和存儲操作栗弟,在請求結(jié)束時(shí)系統(tǒng)會把修改過的會話值保存到存儲器中污筷。
如果多臺服務(wù)器要共享 session,則需要把 session 集中存儲在某個(gè)公用的中間件乍赫,PHP 的 seesion API 可以供我們控制 Session 存儲方式瓣蛀。
MVC 模式
0、 什么是 MVC
MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構(gòu)模式雷厂,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)惋增、視圖(View)和控制器(Controller)。
PHP中MVC模式也稱Web MVC改鲫,從上世紀(jì)70年代進(jìn)化而來诈皿。MVC的目的是實(shí)現(xiàn)一種動態(tài)的程序設(shè)計(jì),便于后續(xù)對程序的修改和擴(kuò)展簡化像棘,并且使程序某一部分的重復(fù)利用成為可能稽亏。除此之外,此模式通過對復(fù)雜度的簡化缕题,使程序結(jié)構(gòu)更加直觀截歉。
1、MVC各部分的職能:
模型Model – 管理大部分的業(yè)務(wù)邏輯和所有的數(shù)據(jù)庫邏輯烟零。模型提供了連接和操作數(shù)據(jù)庫的抽象層瘪松。
控制器Controller - 負(fù)責(zé)響應(yīng)用戶請求、準(zhǔn)備數(shù)據(jù)锨阿,以及決定如何展示數(shù)據(jù)凉逛。
視圖View – 負(fù)責(zé)渲染數(shù)據(jù),通過HTML方式呈現(xiàn)給用戶群井。
一個(gè)典型的Web MVC流程:
Controller截獲用戶發(fā)出的請求状飞;
Controller調(diào)用Model完成狀態(tài)的讀寫操作;
Controller把數(shù)據(jù)傳遞給View;
View渲染最終結(jié)果并呈獻(xiàn)給用戶
協(xié)議制定
RESTful
RESTful架構(gòu)诬辈,就是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)酵使。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)焙糟、易于理解口渔、擴(kuò)展方便,所以正得到越來越多網(wǎng)站的采用穿撮。
1缺脉、名稱:
REST,即Representational State Transfer的縮寫悦穿,”表現(xiàn)層狀態(tài)轉(zhuǎn)化“
2攻礼、資源(Resources):
REST的名稱"表現(xiàn)層狀態(tài)轉(zhuǎn)化"中,省略了主語栗柒。"表現(xiàn)層"其實(shí)指的是"資源"(Resources)的"表現(xiàn)層"礁扮。
所謂"資源",就是網(wǎng)絡(luò)上的一個(gè)實(shí)體瞬沦,或者說是網(wǎng)絡(luò)上的一個(gè)具體信息太伊。它可以是一段文本、一張圖片逛钻、一首歌曲僚焦、一種服務(wù),總之就是一個(gè)具體的實(shí)在曙痘。你可以用一個(gè)URI(統(tǒng)一資源定位符)指向它芳悲,每種資源對應(yīng)一個(gè)特定的URI。要獲取這個(gè)資源屡江,訪問它的URI就可以芭概,因此URI就成了每一個(gè)資源的地址或獨(dú)一無二的識別符。
總結(jié):所謂 "上網(wǎng) "惩嘉,就是與互聯(lián)網(wǎng)上一系列的"資源"互動罢洲,調(diào)用它的URI。
3文黎、表現(xiàn)層(Representation):
"資源"是一種信息實(shí)體惹苗,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式耸峭,叫做它的"表現(xiàn)層"(Representation)桩蓉。
比如,文本可以用txt格式表現(xiàn)劳闹,也可以用HTML格式院究、XML格式洽瞬、JSON格式表現(xiàn),甚至可以采用二進(jìn)制格式业汰;圖片可以用JPG格式表現(xiàn)伙窃,也可以用PNG格式表現(xiàn)。
URI只代表資源的實(shí)體样漆,不代表它的形式为障。嚴(yán)格地說,有些網(wǎng)址最后的".html"后綴名是不必要的放祟,因?yàn)檫@個(gè)后綴名表示格式鳍怨,屬于"表現(xiàn)層"范疇,而URI應(yīng)該只代表"資源"的位置跪妥。它的具體表現(xiàn)形式鞋喇,應(yīng)該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個(gè)字段才是對"表現(xiàn)層"的描述骗奖。
總結(jié):“資源”可以用多種形式表現(xiàn)(一個(gè)文本可以用 txt确徙、HTML醒串、XML执桌、JSON 這些格式來表現(xiàn))
4、狀態(tài)轉(zhuǎn)化(State Transfer):
訪問一個(gè)網(wǎng)站芜赌,就代表了客戶端和服務(wù)器的一個(gè)互動過程仰挣。在這個(gè)過程中,勢必涉及到數(shù)據(jù)和狀態(tài)的變化缠沈。
互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議膘壶,是一個(gè)無狀態(tài)協(xié)議。這意味著洲愤,所有的狀態(tài)都保存在服務(wù)器端颓芭。因此,如果客戶端想要操作服務(wù)器柬赐,必須通過某種手段亡问,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的肛宋,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"州藕。
客戶端用到的手段,只能是HTTP協(xié)議酝陈。具體來說床玻,就是HTTP協(xié)議里面,四個(gè)表示操作方式的動詞:GET沉帮、POST锈死、PUT贫堰、DELETE。它們分別對應(yīng)四種基本操作:GET用來獲取資源待牵,POST用來新建資源(也可以用于更新資源)严嗜,PUT用來更新資源,DELETE用來刪除資源洲敢。
總結(jié):客戶端通過四個(gè)HTTP動詞漫玄,對服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"压彭。
客戶端訪問服務(wù)器時(shí)睦优,根據(jù) URI 訪問到信息實(shí)體(各種文字、圖片壮不、視頻)汗盘,客戶端通過四個(gè)HTTP動詞跃惫,對服務(wù)器端資源進(jìn)行操作磁浇,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"
5、綜述
(1)每一個(gè)URI代表一種資源肚菠;
(2)客戶端和服務(wù)器之間健蕊,傳遞這種資源的某種表現(xiàn)層菱阵;
(3)客戶端通過四個(gè)HTTP動詞,對服務(wù)器端資源進(jìn)行操作缩功,實(shí)現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"晴及。
例子:https://www.baidu.com/img/bd_logo1.png
協(xié)議制定
0、設(shè)計(jì)原則
通用性
簡潔性
統(tǒng)一
1嫡锌、通信協(xié)議定義
協(xié)議的設(shè)計(jì)是一門藝術(shù)虑稼,既不能太復(fù)雜,也不能太簡單势木;太復(fù)雜的話則效率低蛛倦,太簡單則不可以滿足需求。之所以選擇 JSON 協(xié)議作為微博通信協(xié)議的基礎(chǔ)啦桌,就是因?yàn)?JSON 協(xié)議的簡便特性溯壶;當(dāng)然,我們還需要通過設(shè)計(jì)和加工震蒋,把協(xié)議制定的更加合理茸塞。
基礎(chǔ)協(xié)議框架
{
"code" : "正確和錯(cuò)誤的代碼",
"message" : "提示信息",
"result" : "返回內(nèi)容"
}
(1)返回單個(gè)對象數(shù)據(jù)
"result" : {
"模型名" : {key : value, key : value ... }
}
以上情況適用于僅返回單個(gè)模型的情景,比如在用戶個(gè)人信息界面查剖,我們只需要獲取單個(gè)用戶的個(gè)人信息钾虐,那么我們就可以使用這種數(shù)據(jù)的構(gòu)造形式。
(2)返回對象數(shù)組數(shù)據(jù)
"result" : {
"模型名.list" : [
{key : value, key : value ...},
{key : value, key : value ...},
...
]
}
以上的數(shù)據(jù)格式適用于返回一個(gè)模型列表的情景笋庄,比如在微博列表的界面中效扫,我們需要讀取最新若干條微博信息倔监,則可采用這種數(shù)組形式的數(shù)據(jù)來返回多個(gè)模型的數(shù)據(jù)。
(3)返回混合模式數(shù)據(jù)
"result" : {
"模型名" : { ...},
"模型名.list" : { ...}
}
以上情況適用于比較復(fù)雜的組合型界面菌仁,在這種模式下浩习,服務(wù)端APadliI可以同時(shí)返回單個(gè)模型數(shù)據(jù)和模型列表格式的數(shù)據(jù)
服務(wù)端所做的事情,就是把邏輯運(yùn)算的結(jié)果按照協(xié)議制定好的格式把數(shù)據(jù)展示給客戶端济丘。
微博實(shí)例整體結(jié)構(gòu)介紹:
客戶端:
服務(wù)端:HTTP API 接口和 MySQL 數(shù)據(jù)庫之間有一個(gè) “API Debug 后臺”谱秽,這個(gè)組件是我們用來調(diào)試服務(wù)端的 API 接口用的,因?yàn)樵诜?wù)端和客戶端并行開發(fā)的過程中我們不可能使用客戶端來調(diào)試服務(wù)端的 API 接口摹迷,這樣子可以降低調(diào)試服務(wù)端邏輯的困難疟赊。
服務(wù)端架構(gòu)介紹 PHP + MySQL
1、 App MVC
見“接口程序的開發(fā)”
2峡碉、App‘s Library
本層是應(yīng)用程序(App)的類庫層近哟,App MVC 層的邏輯代碼是建立在這個(gè)層次之上的。
好處有二:
(1)簡化開發(fā)鲫寄,重復(fù)編碼可以抽象到一起吉执。
(2)加強(qiáng)對重點(diǎn)邏輯的控制,重復(fù)邏輯提取出來寫入一個(gè)方法里地来,在需要用的地方再調(diào)用戳玫。
3、Hush Framwwork
Hush Framwwork 是一個(gè)PHP框架靠抑,微博實(shí)例的服務(wù)端就是 Hush Framwwork 框架的基礎(chǔ)上開發(fā)的量九,包括(Library)
Hush Framework 處理流程一般步驟:
步驟1: 首先适掰,Hush Framework 的請求分發(fā)器(Dispatcher)會分析客戶端發(fā)送過來的 HTTP 請求所包含的信息颂碧,并根據(jù)請求的 URL 地址來指定使用相應(yīng)的控制器 (Controller)來處理該請求。
步驟2:接著类浪,被指定的控制器會選擇合適的模型類(Model)用于持久層數(shù)據(jù)的獲取和存儲载城,并負(fù)責(zé)處理該請求的業(yè)務(wù)邏輯。此外费就,我們可以看到 Hush Framework 的模型層是基于 Zend Framework 的模型層的诉瓦。在邏輯處理完成后,控制器還會調(diào)用視圖層(View)來組合最終的 HTML 代碼力细。
步驟3:最后睬澡,服務(wù)器會把 Hush Framework 的處理結(jié)果通過 HTTP 協(xié)議返回給客戶端程序來進(jìn)行后續(xù)的處理。
4眠蚂、Zend Framework 框架 和 Smarty 模版
Zend Framework 是官方的 PHP 框架煞聪,適合二次開發(fā),功能強(qiáng)大逝慧。
Smarty 模版
- PHP 語言本身可以嵌入到 HTML 頁面中進(jìn)行數(shù)據(jù)展現(xiàn)昔脯,所以就要寫很多<?php ?> 標(biāo)簽啄糙,這樣就會造成大量的冗余代碼,不利于解耦和分離云稚。所以隧饼,在項(xiàng)目中,需要有一個(gè)專門的模版引擎静陈。
接口程序開發(fā)
服務(wù)端代碼基本目錄結(jié)構(gòu)
![](https://i.niupic.com/images/2016/12/31/7E8ovA.png)
核心類庫分析
1燕雁、Demos_App
控制整個(gè)服務(wù)端應(yīng)用邏輯的基類,一般來說都是供給應(yīng)用的入口程序所使用鲸拥,屬于 MVC 層之上的“總控制層”贵白。下面會詳細(xì)講
2、Demos_App_Server
是所有API接口以及調(diào)試接口的基類崩泡,是MVC層中最核心的一部分禁荒。參考該類的主要代碼(lib/Demos/App/Server.php)
回調(diào)方法
此類型的函數(shù)包括 __init() 初始化毀掉方法和 __done() 銷毀回調(diào)方法,在本基類中這兩個(gè)方法分別負(fù)責(zé)的是控制器在 “類對象初始化” 和 “類對象銷毀” 兩個(gè)階段所要做的事情角撞。
公用方法
比如 forward 路徑跳轉(zhuǎn)方法以及 render 結(jié)果打印方法等呛伴。
3、Demos_Cli
用于處理擴(kuò)展腳本 Cli 編程
4谒所、Demos_Dao
數(shù)據(jù)庫操作對象(DAO)热康,作為 MVC 三層中最接近數(shù)據(jù)的一層,本示例的代碼如下:
public static function load ($class_name)
{
static $_model = array();
if(!isset($_model[$class_name])) {
require_once 'Demos/Dao/' . str_replace('_', '/', $class_name) . '.php';
$_model[$class_name] = new $class_name();
}
return $_model[$class_name];
}
解釋:一個(gè)靜態(tài)方法load用于加載對應(yīng)目錄下的 DAO 類劣领,用于構(gòu)造數(shù)據(jù)庫表的 DAO 對象
5姐军、Demos_Dao_Core
Demos_Dao_Core 類同樣也屬于 MVC 三層中的 Model 層的部分,它繼承自 Demos_Dao 類尖淘,也是 Hush_Db_Dao 的子類
class Demos_Dao_Core extends Demos_Dao
{
/**
* @static
*/
const DB_NAME = 'demos_core';
/**
* Construct
*/
public function __construct ()
{
// initialize dao
parent::__construct(MysqlConfig::getInstance());
// set default dao settings
$this->_bindDb(self::DB_NAME);
}
}
解釋:DAO 的基類奕锌,項(xiàng)目中用到的所有的 DAO 類都將繼承此類,大部份的 DAO 類中所使用的方法都已經(jīng)被 Hush Framework 框架封裝到了 Hush_DB_Dao 類中村生。常見的數(shù)據(jù)庫操作方法(增惊暴、刪、改趁桃、查)
6辽话、Demos_Util
應(yīng)用框架的工具類
Hush Framework 的 MVC 分層思路
1、 控制器 (Controller)
控制器簡單來說就是頁面的邏輯卫病,在 Hush Framework 中我們通常用 Page(頁面)來表示通常意義的 Controller油啤,網(wǎng)絡(luò)應(yīng)用 Page 比較好理解。
HF 使用的是 REST 格式的 URL 路徑結(jié)構(gòu),自域名之后的 URL 路徑第一個(gè)表示的是控制器的名稱蟀苛,第二個(gè)則是表示控制器的動作益咬,也就是我們通常稱的 Action,比如登陸界面的路徑為 “/auth/” ,其對應(yīng)的邏輯就可以在 AuthPage.php 文件中的 AuthPage 類的 indexAction 方法中找到屹逛,這里需要注意的是當(dāng)前的路徑如果為空础废,我們則會用 index 來替代汛骂。
關(guān)于接口的 Session
微博應(yīng)用中的大部分的 API 接口都是要求用戶登錄的,所以就用到了 Session 會話评腺,對于接口 API 來說帘瞭,Session ID 是通過 URL 傳遞的.
DebugServer.php
$configList['action'] = $this->url->format($configList['action']);
這條語句的作用就是把 Session ID 通過 sid 參數(shù)附加到 URL 地址中來進(jìn)行傳遞。
下面開始在代碼上的一些流程,以登錄接口為例 :
入口類 server/www/index.php
<?php
require_once '../../etc/app.config.php';
require_once 'Demos/App.php';
$app = new Demos_App();
// 配置應(yīng)用重要參數(shù)
// addAppDir 添加飲用的控制器類庫目錄蒿讥,此函數(shù)可以被多次調(diào)用蝶念,每次添加一個(gè)類庫目錄,比如在本應(yīng)用中就有 API 接口(Server) 和 網(wǎng)頁應(yīng)用(Website)兩種控制器的目錄芋绸,我們都在index.php 中進(jìn)行設(shè)置
$app->setErrorPage('./404.php')
->addMapFile(__MAP_INI_FILE)
->addAppDir(__LIB_PATH_SERVER)
->addAppDir(__LIB_PATH_WEBSITE);
// 將所有的調(diào)試信息和錯(cuò)誤打印關(guān)閉媒殉,建議在正式環(huán)境關(guān)閉
$app->setDebug(true);
// 設(shè)置Controller類的類名后綴,使用run方法打開應(yīng)用程序的運(yùn)行邏輯摔敛,否則頁面時(shí)不會被執(zhí)行的
$app->run(array(
'defaultClassSuffix' => 'Server'
));
解釋:代碼邏輯的最全面初始化了一個(gè) Demos_App 對象廷蓉,此對象就是整個(gè)應(yīng)用程序的基類。然后马昙,配置了 404 頁面桃犬、路徑映射文件(用于設(shè)定 URL 路由)以及兩個(gè)控制器類庫的路徑,這些都是應(yīng)用程序的必要配置行楞。常量值配置在(etc/app.config.php )
/**
* App definitions
*/
define('__APP_NAME', 'Demos');
define('__APP_VERSION', '1.0');
/**
* URL relative constants
*/
define('__HOST_SERVER', 'http://127.0.0.1:8001');
define('__HOST_WEBSITE', 'http://127.0.0.1:8002');
/**
* MVC url mapping ini file
*/
define('__MAP_INI_FILE', realpath(__ETC . '/app.mapping.ini'));
選取有代表性的微博接口演示:
登陸接口 (http://127.0.0.1:8001/index/login)
代碼路徑:lib/Demos/App/Server/IndexServer.php
loginAction 接口方法對應(yīng)的是 /index/login 的接口地址攒暇,該接口地址會接受從客戶端的登陸界面發(fā)來的請求,進(jìn)而完成服務(wù)端的登陸動作子房。實(shí)際上形用,后面所有的服務(wù)端接口都是這樣使用的。
public function loginAction ()
{
// return login customer
$name = $this->param('name');
$pass = $this->param('pass');
if ($name && $pass) {
$customerDao = $this->dao->load('Core_Customer');
$customer = $customerDao->doAuth($name, $pass);
if ($customer) {
$customer['sid'] = session_id();
$_SESSION['customer'] = $customer;
$this->render('10000', 'Login ok', array(
'Customer' => $customer
));
}
}
// return sid only for client
$customer = array('sid' => session_id());
$this->render('14001', 'Login failed', array(
'Customer' => $customer
));
}
首先使用 param 方法傳入的用戶名(name)和密碼(pass)參數(shù)证杭,然后調(diào)用 Core_Customer 類中的 doAuth 用戶驗(yàn)證方法進(jìn)行處理田度,如果驗(yàn)證成功就把用戶信息放入到 Session 會話中。并且返回登錄成功躯砰,否則失敗每币。
調(diào)用的 doAuth 方法的邏輯就是根據(jù)用戶名和密碼到數(shù)據(jù)表中查找用戶的信息,如果有則返回用戶信息琢歇,若查不到就返回 false。
dbr: db read 的縮寫梦鉴,代表讀庫李茫。
dbw: db write 的縮寫,代表寫庫肥橙。
fetchRow :查找單行魄宏,使用該方法進(jìn)行單行查詢,比如查詢某哥用戶的信息存筏。查詢成功則返回多行的用戶數(shù)據(jù)(默認(rèn)二維數(shù)據(jù))宠互,失敗則返回False味榛。
程序最后都會使用render方法打印 JSON 格式的消息數(shù)據(jù)。該方法有3個(gè)參數(shù)予跌,分別是微博通信協(xié)議中的 code搏色、message、和 result信息券册。
微信小程序樣例
小程序開發(fā)框架的目標(biāo)是通過盡可能簡單频轿、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生 APP 體驗(yàn)的服務(wù)。
框架提供了自己的視圖層描述語言 WXML 和 WXSS烁焙,以及基于 JavaScript 的邏輯層框架航邢,并在視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),可以讓開發(fā)者可以方便的聚焦于數(shù)據(jù)與邏輯上骄蝇。
下面通過一個(gè)簡單的例子來測試一下登錄接口膳殷。提供真實(shí)的使用場景