筋斗雲介面程式設計

2021-07-27 09:28:53 字數 2867 閱讀 3355

隨著移動網際網路的快速發展,各行業對手機應用開發需求旺盛。

應用開發一般分為前端和後端,後端關注資料和業務,需要對前端各類應用(如安卓應用、蘋果應用、h5應用等)提供基於http協議的互動介面。

筋斗雲使用php語言開發的,實現了「分布式物件訪問與許可權控制架構」(daca)中的規約,提供的http介面符合業務查詢協議(bqp)。

筋斗雲提供物件型介面和函式型介面兩類介面開發模式,前者專為物件的增刪改查提供易用強大的程式設計框架,後者則更為自由。

[物件型介面 - 資料模型即介面]

假設資料庫中已經建好一張記錄操作日誌的表叫」apilog」,包含欄位id(主鍵,整數型別), tm(日期時間型別), addr(客戶端位址,字串型別)。

使用筋斗雲後端框架,只要建立乙個空的類,就可將這個表(或稱為物件)通過http介面暴露給前端,提供增刪改查各項功能:

class

ac_apilog

extends

accesscontrol

現在就已經可以對匿名訪問者提供」apilog.add」, 「apilog.set」, 「apilog.get」, 「apilog.query」, 「apilog.del」這些標準物件操作介面了。

我們用curl工具來模擬前端呼叫,假設服務介面位址為http://localhost/mysvc/api.php,我們就可以呼叫」apilog.add」介面來新增資料:

curl http://localhost/mysvc/api.php/apilog.add -d "tm=2016-9-9 10:10" -d "addr=shanghai"
輸出乙個json陣列:

[0,11338]
0表示呼叫成功,後面是成功時返回的資料,add操作返回的是新物件的id。

可以呼叫」apilog.query」來取列表:

curl http://localhost/mysvc/api.php/apilog.query
列表支援分頁,預設一次返回20條資料。query介面非常靈活,還可以指定返回字段、查詢條件、排序方式,

比如查詢2023年1月份的資料(cond引數),結果只需返回id, addr欄位(res引數),按id倒序排列(orderby引數):

curl http://localhost/mysvc/api.php/apilog.query -d "res=id,addr" -d "cond=tm>='2016-1-1' and tm<'2016-2-1'" -d "orderby=id desc"
甚至可以做統計,比如檢視2023年1月裡,列出訪問次數排名前10的位址,以及每個位址訪問了多少次伺服器,也可以通過query介面直接查出。

可見,用筋斗雲後端框架開發物件操作介面,可以用非常簡單的**實現強大而靈活的功能。

[函式型介面]

除了物件型介面,還有一類叫函式型介面,比如要實現乙個介面叫」getinfo」用於返回一些資訊,開發起來也非常容易,只要定義下面乙個函式:

function

api_getinfo

()

於是便可以訪問介面」getinfo」:

curl http://localhost/mysvc/api.php/getinfo
返回:

[0, ]
[許可權控制]

許可權包括幾種,比如根據登入型別不同,分為使用者、員工、超級管理員等角色,每種角色可訪問的資料表、資料列(即欄位)有所不同,一般稱為授權(auth)。

授權控制不同角色的使用者可以訪問哪些物件或函式型介面,比如getinfo介面只許使用者登入後訪問:

function

api_getinfo

()

再如apilog物件介面只允許員工登入後訪問,且限制為唯讀訪問(只允許get/query介面),不允許使用者或遊客訪問,只要定義:

// 不要定義ac_apilog,改為ac2_apilog

class

ac2_apilog

extends

accesscontrol

在應用配置中,已將類字首」ac2」繫結到員工角色(auth_emp),類似地,」ac」字首表示遊客角色,」ac1」字首表示使用者角色(auth_user)。

通常許可權還控制對同乙個表中資料行的可見性,比如即使同是員工登入,普通員工只能看自己的操作日誌,經理可以看到所有日誌。

這種資料行許可權,也稱為data ownership,一般通過在查詢時追加限制條件來實現。假設已定義乙個許可權perm_mgr,對應經理許可權,然後實現許可權控制:

class

ac2_apilog

extends

accesscontrol

"); }

}}

[一站式資料模型部署]

筋斗雲框架重視設計文件,倡導在設計文件中用簡約的方式定義資料模型與介面原型,

例如,上例中的apilog表,無需手工建立,只要設計文件中定義:

@apilog: id, tm, addr
使用工具就可以自動建立資料表,由於資料模型即介面,也同時生成了相應的物件操作介面。

工具會根據欄位的命名規則來確定字段型別,比如」id」結尾就用整型,」tm」結尾就用日期時間型別等。

當增加了表或字段,同樣執行工具,資料庫和後端介面也都會相應被更新。

筋斗雲介面程式設計 建立Web介面專案

任務 用筋斗雲框架建立乙個web介面專案叫mysvc,建立資料庫,提供對apilog物件的操作介面。git clone mysvc如果github訪問困難,也可以用這個git倉庫 配置好web伺服器,php環境和mysql資料庫。注意php最低版本需要5.4版本,需要開啟mysql,pdo,gd等支...

筋斗雲介面程式設計 常用操作(一)

函式mparam用來取必傳引數 m表示mandatory 引數既可以用url引數,也可以用post引數傳遞。如果是取乙個可選引數,可以用param函式。與直接用php的 get等變數相比,param mparam可指定引數型別,如 取id引數,特別地,對id引數會返回乙個整數。id param id...

筋斗雲介面程式設計 常用操作(二)

函式應返回符合介面原型中描述的物件,框架會將其轉為最終的json字串。比如登入介面要求返回 因而在api login中,返回結構相符的物件即可 ret id id,isnew 1 return ret 最終返回的json示例 0,如果介面原型中沒有定義返回值,框架會自動返回字串 ok 比如介面api...