① 什麼是介面文檔,如何寫介面,有什麼規范
含義是:在項目開發中,web項目的前後端分離開發,APP開發,需要由前後端工程師共同定義介面,編寫介面文檔,之後大家都根據這個介面文檔進行開發,到項目結束前都要一直維護。
目的是:項目開發過程中前後端工程師有一個統一的文件進行溝通交流開發。項目維護中或者項目人員更迭,方便後期人員查看、維護。
規范是:以/a開頭,如果需要登錄才能調用的介面(如新增、修改;前台的用戶個人信息,資金信息等)後面需要加/u,即:/a/u;中間一般放表名或者能表達這個介面的單詞;get方法,如果是後台通過搜索查詢列表,那麼以/search結尾,如果是前台的查詢列表,以/list結尾;url參數就不說了。
API(Application Programming Interface,應用程序介面)是一些預先定義的介面(如函數、HTTP介面),或指軟體系統不同組成部分銜接的約定。用來提供應用程序與開發人員基於某軟體或硬體得以訪問的一組常式,而又無需訪問源碼,或理解內部工作機制的細節。
應用程序介面又稱為應用編程介面,是一組定義、程序及協議的集合,通過 API介面實現計算機軟體之間的相互通信。API 的一個主要功能是提供通用功能集。
API同時也是一種中間件,為各種不同平台提供數據共享。程序設計的實踐中,編程介面的設計首先要使軟體系統的職責得到合理劃分。良好的介面設計可以降低系統各部分的相互依賴,提高組成單元的內聚性,降低組成單元間的耦合程度,從而提高系統的可維護性和可擴展性。
② 用thinkphp寫一個app登錄的介面 麻煩哪位大神給個事例
1、可以使用 REST模式 來開發 App 介面,首先建立一個公共控制器,再建其他控制器繼承它即可。
2、確定好返回的數據內容格式及信息碼;
<?php
// App介面公共控制器 AppController
namespace Api\Controller;
use Think\Controller\RestController;
class AppController extends RestController {
// 自動載入的東西
function _initialize() { }
// 驗證 客戶端 token
protected function checkAppToken($apptoken){
// 引入 function.php 中定義的檢測 apptoken 的函數
if(checkingAppToken($apptoken)){
return true;
}else{
$data['code'] = '404';
$data['msg'] = 'apptoken無效';
$data['data'] = null;
$this -> response($data, 'json');
exit();
}
}
// 驗證 用戶 token
protected function checkUserToken($usertoken){
}
// 各種驗證 ……
}
?>
復制代碼
其他介面控制器繼承 AppController
<?php
// 內容控制器 ContentsController
namespace Api\Controller;
class ContentsController extends AppController {
// 自動載入驗證
function _initialize() {
parent::_initialize();
// 驗證 客戶端 token
$apptoken = I('post.apptoken');
parent::checkAppToken($apptoken);
// 驗證 用戶 token
$usertoken = I('post.usertoken');
parent::checkUserToken($usertoken);
// 各種需要驗證的驗證 ……
}
// 各種業務方法
public function index(){
// 返回數據
$this -> response($data, 'json');
exit();
}
}
?>
③ app移動介面開發需要注意什麼
1.制定規范
開發前一定要定好一個規范,比如要定好數據返回的通用參數和格式。關於數據格式,用的比較多的有xml和json,我建議用json,因為json比xml的好處更多。
2.精簡的返回數據
介面數據因符合需要什麼返回什麼的原則,比如要查詢某個用戶的余額和注冊時間,網頁禪洞裡面的做法可能是select * from user where uid=1,但是介面一定要select balance,regtime from user where uid=1。因為介面返回數據是要有開銷的,要流量的,能少返回數據就盡量少返回,這樣可以大大的提高性能。
3.數據類型要嚴格
要注意數據的類型,整數類型的數據一定要轉為int,因為app客戶端開發的java、object-c語言對數據類型比較嚴格,類型不對會照成app閃退。
4.要寫介面文檔
一定要寫好介面文檔,並按照模塊寫,而且還要書寫規范,最好的格式是:
介面請求地址;請求參數(包括參數名、類型、是否必填);測試參數舉例;返回參數(參數名,並註明每個參數的含義)。
這樣哪怕以後項目很大,以不會照成維護困難的問題。
5.保證代碼正確性
要驗證保證代碼正確無誤,而且生成環境中要屏蔽掉錯誤,避免頭部有額外的輸出,照成返回的json等數據解析失敗而導致app閃退等。
6.要優化代碼的性能
app要求響應迅速,這樣才能給用戶比較好的體驗感。所以移動介面端在處理業務邏輯的時候,要避免不要執行太復雜的sql語句,或者含有大量的循環,能做成緩存的盡量做頌檔緩存,比如將首頁的熱點模塊信息可以存到redis緩存中。在不考慮網速的情況下,比較理想的介面響應時間應該是200毫秒以內。
7.不要隨意更改舊介面
app不像網頁,app一旦發布,有人使用之後,介面就不要亂修改了。以後升級也是,修改要在保證介面原有結構之野襲亂上進行額外的擴展,否則會導致調用舊版介面的app出現bug。
8. 注意介面的安全
安全高於一切,必須要保證介面的安全。電話號碼等敏感信息在傳輸的過程中一定要加密,否則可能會被別人抓包到。拿取用戶信息的介面一定要驗證許可權,以防止介面被惡意調用,泄密用戶信息,甚至篡改信息。
以上只是一些基礎注意事項,真正要完成一個項目,得注意很多很多,其中的點點滴滴都需要謹慎對待,這些需要在開發中慢慢體會、總結。
④ App 和 Web 的通用介面該怎麼設計
1、在介面定義中確定MVC的GET或者POST方式
由於我埋滲們整個Web API平台是基於MVC的基礎上進行的API開發,因此整個Web API的介面,在定義的時候,一般需要顯示來聲明介面是[HttpGet]或者[HttpPost],雖然有些介面也可以不用聲明,但是避免出現類似下面的錯誤信息,顯式聲明還是有好處的。
請求的資源不支持 http 方法「POST
例如在基類定義的查找對象介面如下所示。
/// <summary>
/// 查詢資料庫,檢查是否存在指定ID的對象
/// </summary>
/// <param name="id">對象的ID值</param>
/// <returns>存在則返回指定的對象,否則返回Null</returns>
[HttpGet]
public virtual T FindByID(string id, string token)
如果是增刪改的介面,一般需要聲明為POST方式提交數據,而且基於安全性的考慮,需要攜帶更多的參數。
/// <summary>
///兆液激 插入指定對象到資料庫中
/// </summary>
/// <param name="info">指定的對象</param>
/// <returns>執行操作是否成功。</returns>
[HttpPost]
public virtual CommonResult Insert(T info, string token, string signature, string timestamp, string nonce, string appid)
2、動態對象的介面定義
在一般的Web API介面裡面,我們可能都會碰到很多簡單類型的參數,但是又想讓它們以POST方式提交數據,那麼我們就可以有兩種方法來處理,一種是定義一個類來放置這些參數,一種是採用動態的JObject參數,前者有很多不方便的地方,因為我們不可能為每個介面參數定義多一個實體類,這樣可能會有很多難以管理的類定義。如下面是微信API的調用介面案例,我們也需要設置這樣的處理規則。
介面調用請求說明
http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN
POST數據格式:json
POST數據例子:{"group":{"id":108,"name":"test2_modify2"}}
那麼我們採用JObject是這么樣的呢,我們來看介面的定義和處理代碼。JObject是Newtonsoft.Json.Linq命名空間下的一個對象。
/// <summary>
/// 修改用戶密碼
/// </summary>
/// <param name="param">包含userName和userPassword的復合對象族襪</param>
/// <param name="token">用戶訪問令牌</param>
/// <returns></returns>
[HttpPost]
public CommonResult ModifyPassword(JObject param, string token)
{
//令牌檢查,不通過則拋出異常
CheckResult checkResult = CheckToken(token);
dynamic obj = param;
if (obj != null)
{
string userName = obj.userName;
string userPassword = obj.userPassword;
bool success = BLLFactory<User>.Instance.ModifyPassword(userName, userPassword);
return new CommonResult(success);
}
else
{
throw new MyApiException("傳遞參數出現錯誤");
}
}
其中我們把JObject對象轉換為我們所需要的對象的時候,因為我們沒有定義具體的實體類,因此採用了dynamic語法,聲明這是一個動態對象,由運行時獲取對應的屬性。
dynamic obj = param;
這樣我們就可以在調用的時候,動態POST對應的JSON對象給Web API介面,而不需要預先定義各種介面參數的類了。
/// <summary>
/// 調用Web API介面,修改用戶密碼
/// </summary>
/// <param name="userName">用戶名稱</param>
/// <param name="userPassword">修改的密碼</param>
/// <returns>如果修改成功返回true,否則返回false</returns>
public bool ModifyPassword(string userName, string userPassword)
{
var action = "ModifyPassword";
var postData = new
{
userName = userName,
userPassword = userPassword
}.ToJson();
string url = GetTokenUrl(action);
CommonResult result = JsonHelper<CommonResult>.ConvertJson(url, postData);
return (result != null) ? result.Success : false;
}
其中GetTokenUrl是根據token和API的地址等參數,構建一個完整的提交地址。我們在上面代碼通過
var postData = new
{
userName = userName,
userPassword = userPassword
}.ToJson();
就可以動態創建一個對象,並生成它的JSON字元串,把數據POST提交到對應的API介面裡面即可,然後對結果進行對象的轉換就算完成了。
3、集合和分頁的處理
在很多介面裡面,我們都需要用到分頁的處理,Web API也不例外,這樣可以提交數據檢索效率,減少伺服器數據處理的壓力,同時也提交客戶端的數據顯示速度。
一般的集合介面定義如下所示(通用性基類介面)。
/// <summary>
/// 返回資料庫所有的對象集合
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpGet]
public virtual List<T> GetAll(string token)
{
//檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List<T> list = baseBLL.GetAll();
return list;
}
但是這樣的返回記錄會比較多,一般情況下需要分頁,那麼分頁的處理介面定義如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpPost]
public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token)
分頁介面,在這里返回的結果裡面,用了一個PageList的泛型類,這個方便我們獲取當前的記錄及總數,它的定義如下所示。
/// <summary>
/// 分頁集合
/// </summary>
/// <typeparam name="T">對象</typeparam>
public class PagedList<T>
{
/// <summary>
/// 返回記錄的總數
/// </summary>
public int total_count { get; set; }
/// <summary>
/// 列表集合
/// </summary>
public List<T> list { get; set; }
}
最後整個分頁的處理Web API介面實現如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpPost]
public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token)
{
//檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List<T> list = baseBLL.FindWithPager(condition, pagerInfo);
//構造成Json的格式傳遞
var result = new PagedList<T>() { total_count = pagerInfo.RecordCount, list = list };
return result;
}
最後客戶端調用分頁的Web API代碼如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <param name="condition">查詢的條件</param>
/// <param name="pagerInfo">分頁實體</param>
/// <returns>指定對象的集合</returns>
public virtual List<T> FindWithPager(string condition, ref PagerInfo pagerInfo)
{
var action = "FindWithPager";
string url = GetTokenUrl(action) + string.Format("&condition={0}", condition);
var postData = pagerInfo.ToJson();
List<T> result = new List<T>();
PagedList<T> list = JsonHelper<PagedList<T>>.ConvertJson(url, postData);
if (list != null)
{
pagerInfo.RecordCount = list.total_count;//修改總記錄數
result = list.list;
}
return result;
}
4、混合框架界面整合Web API介面
在整個Web API的平台構建以及在混合框架的整合過程中,我把各個模塊還是遵循相對獨立的方式進行開發和整合,它們實現了從直接訪問資料庫、以WCF服務獲取數據,以及通過WebAPI調用方式獲取數據幾種方式的統一,從而實現了整個混合框架的高度整合。
整個混合框架的核心是以相對獨立的方式,整合各個可重用的模塊,我們可以遵循一定的基礎上,快速構建統一的應用平台。
搭建完畢的整個WebAPI平台,其中包括了服務端內容,以API控制器的方式,發布了對應的Web API介面。
在每個混合框架的獨立模塊裡面,我們封裝了對應的Web API客戶端調用處理,從而實現了Web API的調用方式。
在Win10下,使用Web API模式運行混合框架,獲得的主體界面效果如下所示。
獨立模塊許可權管理系統界面如下所示。
系列文章如下所示:
Web API應用架構在Winform混合框架中的應用(1)
Web API應用架構在Winform混合框架中的應用(2)--自定義異常結果的處理
Web API介面設計經驗總結
Web API應用架構在Winform混合框架中的應用(3)--Winfrom界面調用WebAPI的過程分解
Web API應用架構在Winform混合框架中的應用(4)--利用代碼生成工具快速開發整套應用
Web API應用架構在Winform混合框架中的應用(5)--系統級別字典和公司級別字典並存的處理方式
⑤ 如何利用postman做app介面測試
1、在Google已安裝完成的介面測試工具的postman的程序之後,點擊進入桌面的chrome應用啟動器。
⑥ 如何為自己的App搭建後台Api介面
如果你是使用的VC (Visual Studio C++)的話,也是有與VB類似的工具箱來拖放控制項的,對於一般的應用程序,推薦基於MFC來開發。--這意味著你需要再學習一些新的東西,如果你只是處於學習C語言的階段,這沒有必要這樣。 如果你是使用的Turbo C之類的,因為那個年代很多系統還是DOS的字元界面,所以基本上沒有好的工具來作GUI界面,需要自己編輯資源文件來創建Win32的界面,需要比較熟悉win32的api。對於簡易的界面而言,這是可行的,復雜點的,還是使用VC比較好。