BeetleX之webapi使用入門

beetlex發表於2020-10-11

        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

相關文章