批量請求
批量請求
筋斗雲框架支援批量請求,即在一次請求中,包含多條介面呼叫。
假設一個前端頁面進入時,需要接連呼叫好多次介面才能完成展現,一般的做法是需要後端重新設計介面來優化。 筋斗雲支援batch介面,這時後端不必做任何設計修改,前端只要呼叫batch介面即可獲得優化。
假如前端進入某頁面,需要呼叫下面兩個介面:
獲取使用者資訊
User.get() -> {id, name, phone, ...}
上傳使用者操作日誌
ActionLog.add()(page, ver, userId) -> id
批處理允許把兩個請求一次性提交,減少互動帶來的開銷。
如果前端H5應用使用了筋斗雲前端框架,可以非常方便的啟動/禁用批處理操作,只需要在多次呼叫前加一行useBatchCall,就可將多次呼叫合併成一次批呼叫:
MUI.useBatchCall(); // 在本次訊息迴圈中執行所有的callSvr都加入批處理。
// MUI.useBatchCall({useTrans:1}); // 啟用事務的寫法
// 呼叫一
var param = {res: "id,name,phone"};
callSvr("User.get", param, function(data) {} )
// 呼叫二
var postParam = {page: "home", ver: "android", userId: "{$1.id}"};
callSvr("ActionLog.add", function(data) {}, postParam, {ref: ["userId"]} );
其原理是使用batch介面,在POST內容中設定每個呼叫,請求示例如下:
POST /mysvc/api.php/batch
[
{
"ac": "User.get",
"get": {"res": "name,phone"}
},
{
"ac": "ActionLog.add",
"post": {"page": "home", "ver": "android", "userId": "{$-1.id}"},
"ref": ["userId"]
}
]
POST內容的格式是一個JSON陣列,陣列中每一項為一個呼叫宣告,引數有ac, get, post, ref等, 只有ac引數必須,其它均可省略。
引數
- get: URL請求引數。
- post: POST請求引數。
- ref: 使用了batch引用的引數列表。
後面的請求還可以引用前面請求返回的內容作為引數。例子中,呼叫二中引數userId引用了呼叫一的返回結果,userId的值"{$1.id}"表示取第一次呼叫值的id屬性。 注意:引用表示式應以"{}"包起來,"$n"中n可以為正數或負數(但不能為0),表示對第n次或前n次呼叫結果的引用,以下為可能的格式:
"{$1}"
"id={$1.id}"
"{$-1.d[0][0]}"
"id in ({$1}, {$2})"
"diff={$-2 - $-1}"
花括號中的內容將用計算後的結果替換。如果表示式非法,將使用"null"值替代。
在建立批量請求時,可以指定這些呼叫是否在一個事務(transaction)中,一起成功提交或失敗回滾。
如果想讓這批請求在一個事務中處理,只需要增加URL引數useTrans=1
:
POST /mysvc/api.php/batch?useTrans=1
batch的返回內容是多條呼叫返回內容組成的陣列,樣例如下:
[0, [
[ 0, {id: 1, name: "使用者1", phone: "13712345678"} ], // 呼叫User.get的返回結果
[ 0, "OK" ] // 呼叫ActionLog.add的返回結果
]]
相關文章
- php curl_multi批量傳送http請求PHPHTTP
- DDD:聚合根的批量刪除是不是可以批量傳送請求
- python非同步IO與批量請求處理Python非同步
- SharePoint REST API - 一個請求批量操作RESTAPI
- Oracle EBS提交過多請求批量取消的方法Oracle
- iOS 同步請求 非同步請求 GET請求 POST請求iOS非同步
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 請求框架&移動請求框架
- 請求OpenFeign的GET請求時,請求為何失敗?
- 有趣的請求引數/請求頭
- 大請求、請求超時問題
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- 網路請求優化之取消請求優化
- ajax請求
- http請求HTTP
- HTTP 請求HTTP
- 如何根據介面請求型別和請求方法,自動執行對應請求型別
- 使用 Laravel 請求類來驗證表單請求Laravel
- URL請求不能解決中文請求的問題
- 請求重定向和請求轉發的區別
- Zttp 傳送 form params 請求 而非 JSON 請求ORMJSON
- Android Http請求框架一:Get 和 Post 請求AndroidHTTP框架
- Android okHttp網路請求之Get/Post請求AndroidHTTP
- python requests get請求 如何獲取所有請求Python
- PHP curl 請求PHP
- 請求基本流程
- ajax請求 juery
- java post 請求Java
- http請求概述HTTP
- 離散請求
- axios 請求iOS
- 預檢請求
- 跨域請求跨域
- dart原生請求Dart
- TCP 請求頭TCP
- HTTP請求方法HTTP
- 一、put請求
- plsql提交請求SQL