BeetleX是TCP通訊應用元件,在它之上可以擴充套件任何基於TCP的應用通訊功能。FastHttpApi是元件擴充套件的一個Http/Https/Websocket服務元件,它提供的功能豐富,包括功能有:靜態檔案,動態資料控制器和Websocket等相關功能支援;實際在上還在FastHttpApi基礎擴充套件了Http/Https/Websocket閘道器應用元件(更直觀上來說https://beetlex.io網站上的所有服務內容都是基於BeetleX構建)。
在現有前後分離的Web開發應用模式中,編寫Webapi作為資料服務通訊互動是比較普遍的。接下來介紹如何使用元件快速地構建一個Webapi服務。
控制器定義
元件在定義Webapi控制器並沒有什麼特別的要求,只需要根據實際應用情況定義類和相關方法即可。
[Controller]
public class Webapi
{
public object Hello(string name)
{
return $"hello {name}";
}
}
以上定義一個物件並帶有Hello方法,只要在類上標記[Controller]即可被元件載入成Webapi服務訪問路徑為/Hello ;方法可以通過post/get進行訪問,即使是傳統的form post或json post都同時相容,無須在引數上新增任何描述型的標籤(這也是元件使用方便性的地方)。
啟動服務
當Webapi控制器編寫完成後就可以寫服務啟動它。
class Program
{
static void Main(string[] args)
{
HttpApiServer server = new HttpApiServer();
server.Register(typeof(Webapi).Assembly);
server.Options.Port = 80;
server.Options.LogLevel = EventArgs.LogType.Info;
server.Options.LogToConsole = true;
server.Options.SSL = true;
server.Options.CertificateFile = "ssl.pfx";
server.Options.CertificatePassword = "123456";
server.Open();
System.Threading.Thread.Sleep(-1);
}
}
只需要建立一個HttpApiServer物件,通過Register方法把存在控制器的程式集註冊即可,如果有多個程式集則可以傳入多個。接下來的工作就是配置埠和SSL資訊;最後通過Open方法啟動對應的Http/Https服務。
通過以上日誌可以檢視服務啟動情況。
服務訪問
服務啟動後就可以通過瀏覽器對它進行訪問
元件為了更好配合自己有的js元件庫呼叫,所以預設返回一個針對性的結構體。在實際應用中可以需要制定自己的返回結構,這個時候可以制定自己的IResult返回物件
public object Hello(string name)
{
return new JsonResult($"hello {name}");
}
//或者
[DefaultJsonResultFilter]
public object Hello(string name)
{
return $"hello {name}";
}
以上兩種情況是定義一個預設返回的Json結構體,不附加任何其他資訊成員。
實際應用中也可以針對自己的需求來制定不同的IResult.
請求上下文
在控制器中有時間不僅僅獲取請求資料,有時候還需要獲取和設定請求頭和Cookie等;這個時候就需要訪問組針對Http資訊關聯的詳細資訊。元件提供了一個IHttpContext的介面來訪問相關資訊,這個物件只要引數中定義即可以由元件自動提供。
public object GetContext(IHttpContext context)
{
return context.Request.Header.Copy();
}
可以訪問GetContext方法獲取當前請求的頭資訊
配置檔案
有很多時候希望通過檔案配置來更改監聽的埠和對應的SSL配置資訊等;元件預設會讀取當前執行目錄下的HttpConfig.json配置檔案,如果目錄下沒有這個檔案則是元件內部預設配置。
{
"HttpConfig": {
"SameSite": null,
"ServerTag": "beetlex.io",
"OutputServerTag": true,
"IPRpsLimit": 0,
"IPRpsLimitDisableTime": 1800000,
"MaxWaitQueue": 1000,
"BufferPoolSize": 10,
"BufferPoolGroups": 4,
"IOQueues": 1,
"SyncAccept": true,
"ManageApiEnabled": true,
"Statistical": true,
"IOQueueEnabled": false,
"CacheLogMaxSize": 1000,
"CacheLogFilter": null,
"MaxrpsSettings": [],
"Settings": [],
"AccessKey": null,
"AutoGzip": false,
"StaticResurceCacheTime": 0,
"BufferPoolMaxMemory": 500,
"SessionTimeOut": 600,
"UseIPv6": true,
"Virtuals": [],
"PacketCombined": 0,
"FileManager": false,
"FileManagerPath": null,
"LogToConsole": true,
"NotLoadFolder": "\\Files;\\Images;\\Data",
"CacheFiles": "html;htm;js;css",
"CacheFileSize": 500,
"LogLevel": 16,
"WebSocketMaxRPS": 30,
"BufferSize": 8192,
"NoGzipFiles": "jpg;jpeg;png;gif;png;ico;zip;rar;bmp",
"MaxConnections": 2000,
"Manager": null,
"ManagerPWD": null,
"WriteLog": false,
"Host": "",
"Debug": false,
"FixedConverter": false,
"AgentRewrite": true,
"RewriteIgnoreCase": true,
"RewriteCachedSize": 500000,
"Port": 80,
"SSL": true,
"SSLPort": 443,
"CertificateFile": "beetlex.pfx",
"CertificatePassword": "******",
"MaxBodyLength": 2097152,
"OutputStackTrace": true,
"StaticResurceType": "woff2;js;rar;xml;woff;css;jpg;gif;map;zip;jpeg;svg;txt;ico;ttf;htm;png;html",
"DefaultPage": "index.html;index.htm",
"StaticResourcePath": null
}
}
由於元件涉及到很多方面的配置,如:url重寫,執行緒佇列,緩衝區和靜態資源支援等等;一般情況下只需要針對以下幾項配置過行調整即可。
{
"HttpConfig": {
"SameSite": null,
"ServerTag": "beetlex.io","Port": 80,
"SSL": true,
"SSLPort": 443,
"CertificateFile": "beetlex.pfx",
"CertificatePassword": "******",
"MaxBodyLength": 2097152,
"OutputStackTrace": true,
"StaticResurceType": "woff2;js;rar;xml;woff;css;jpg;gif;map;zip;jpeg;svg;txt;ico;ttf;htm;png;html",
"DefaultPage": "index.html;index.htm"
}
}
下載示例
連結:https://pan.baidu.com/s/10Ct0jJQfKRnc-jXI4JoGig
提取碼:xywc