リクエストハンドラの設計


このポストは、少し抽象的で、チュートリアルまたは何でもでありません.私は、残りのAPI要求の取り扱いのためにIPARTでクラスを書き直していました.これはハンドラの設計方法について少しのフォークにつながった.
私が以前考えた考えは
()
using Impart;
using Impart.API;

public class Program
{
    static void Main(string[] args)
    {
        Rest r = new Rest();
        r.OnRequest += OnRequest;
        r.Start();
    }
    static void OnRequest(APIEventArgs e, RestContext c)
    {
        Json j = new Json("Impart", ("Developer", "William Olsen"), ("Current Downloads", 519), ("Current Stars", 8));
        c.Respond(j);
    }
}
明らかに、これはURLルーティングを説明し始めません.たとえば、特定のJSONレスポンスを送信したい場合localhost:8080/test , 私はできません.これは基本的にAPIを作成する全体のポイントを破ります.
修正プログラムの最初のアイデアは、心に浮かぶだけでは、URLの情報を含めることですAPIEventArgs or RestContext オブジェクト.しかし、それは開発者にこう書かれています.
static void OnRequest(APIEventArgs e, RestContext c)
{
    switch (c.Url)
    {
        case "/test":
            //the user accessed localhost:8080/test
            break;
        case "":
            //the user accessed localhost:8080
            break;
    }
}
今私は不和を使用してスラッシュコマンドを追加しなかった人の種類である.ネットは特に巨大なswitch文を使用していたので、これは正しく感じませんでした.
人気のC Chenhy API APIライブラリを勉強すると、それは明確な修正プログラムのように各要求を分離することです.
しかし、どうやってこれを行うのだろうか?
答えは使用ですSystem.Reflection とカスタム属性.少し警告:これらのメソッドを分析するコードは非常に、非常に醜いので、注意してください.
迅速な実装は、開発者に以下のようになります.
[RestRequest("/test")]
public void RequestHandle1(APIEventArgs e, RestContext c)
{
    //the user accessed localhost:8080/test
}

[RestRequest("")]
public void RequestHandle2(APIEventArgs e, RestContext c)
{
    //the user accessed localhost:8080
}
私は、これがASPに非常に類似していると理解します.何でも.継承するクラスの呼び出しRest しかし、まだ同じです.
うまくいけば、この改善Rest クラスは、Iv 2のために時間内に終えられます.0.2私が(3月の終わりにそれをリリースする)とき.
さらに、私は以前に述べたポストを更新するか、アップデートがリリースされるとき、残りAPIをホストする方法についての1つを作成します.