ABP(現代ASP.NET樣板開發架構)系列之20、ABP展現層——動態產生WebApi

來源:互聯網
上載者:User

標籤:

點這裡進入ABP系列文章總目錄

 

ABP(現代ASP.NET樣板開發架構)系列之20、ABP展現層——動態產生WebApi

 

ABP是“ASP.NET Boilerplate Project (ASP.NET樣板項目)”的簡稱。

ABP的官方網站:http://www.aspnetboilerplate.com

ABP在Github上的開源項目:https://github.com/aspnetboilerplate

 

 

建立動態WebApi控制器

Abp架構能夠通過應用程式層自動產生web api:

    public interface ITaskAppService : IApplicationService    {        GetTasksOutput GetTasks(GetTasksInput input);        void UpdateTask(UpdateTaskInput input);        void CreateTask(CreateTaskInput input);    }

Abp架構通過一行關鍵代碼的配置就可以自動、動態為應用程式層建立一個web api 控制器:

DynamicApiControllerBuilder.For<ITaskAppService>("tasksystem/task").Build();

這樣就OK了!建好的webapi控制器(/api/services/tasksystem/task)所有的方法都能夠在用戶端調用。webapi控制器通常是在模組初始化的時候完成配置。 ITaskAppService是應用程式層服務(application service)介面,我們通過封裝讓介面實現一個api控制器。ITaskAppService不僅限於在應用程式層服務使用,這僅僅是我們習慣和推薦的使用方法。 tasksystem/task是api 控制器的命名空間。一般來說,應當最少定義一層的命名空間,如:公司名稱/應用程式/命名空間/命名空間1/服務名稱。 ‘api/services/’是所有動態web api的首碼。所以api控制器的地址一般是這樣滴:‘/api/services/tasksystem/task’,GetTasks 方法的地址一般是這樣滴: ‘/api/services/tasksystem/task/getTasks’。因為在傳統的js中都是使用駝峰式命名方法,這裡也不一樣。 你也可以刪除一個api方法,如下:

DynamicApiControllerBuilder    .For<ITaskAppService>("tasksystem/taskService")    .ForMethod("CreateTask").DontCreateAction()    .Build();

ForAll方法 在程式的應用服務層建立多個api控制器可能讓人覺得比較枯燥,DynamicApiControllerBuilper提供了建立所有應用程式層服務的方法,如下所示:

    DynamicApiControllerBuilder    .ForAll<IApplicationService>(Assembly.GetAssembly(typeof(SimpleTaskSystemApplicationModule)), "tasksystem")    .Build();

ForAll方法是一個泛型介面,第一個參數是從給定介面中派生的集合,最後一個參數則是services命名空間的首碼。ForAll集合有ITaskAppService和 IpersonAppService介面。根據如上配置,服務層的路由是這樣的:‘/api/services/tasksystem/task‘和‘/api/services/tasksystem/person‘。

服務命名規範:服務名+AppService(在本例中是person+AppService) 的尾碼會自動刪除,產生的webapi控制器名為“person”。同時,服務名稱將採用峰駝命名法。如果你不喜歡這種約定,你也可以通過“WithServiceName”方法來自訂名稱。如果你不想建立所有的應用服務層,可以使用where來過濾部分服務。

使用動態JavaScript代理

你可以通過ajax來動態建立web api控制器。Abp架構對通過動態js代理建立web api 控制器做了些簡化,你可以通過js來動態調用web api控制器

    abp.services.tasksystem.task.getTasks({    state: 1    }).done(function (data) {    //use data.tasks here..    });

js代理是動態建立的,頁面中需要添加引用:

    <script src="/api/abp.ServiceProxies/GetAll" type="text/javascript"></script>

服務方法(service methods)返回約定(可參見JQ的Deferred),服務方法使用Abp架構.ajax代替,可以處理、顯示錯誤。

Ajax參數

自訂ajax代理方法的參數:

    Abp.services.tasksystem.task.createTask({        assignedPersonId: 3,        description: ‘a new task description...‘    },{ //override jQuery‘s ajax parameters        async: false,        timeout: 30000    }).done(function () {        Abp.notify.success(‘successfully created a task!‘);    });

所有的jq.ajax參數都是有效。

單一服務指令碼

‘/api/abpServiceProxies/GetAll‘將在一個檔案中產生所有的代理,通過 ‘/api/abpServiceProxies/Get?name=serviceName‘ 你也可以產生單一服務代理,在頁面中添加:

  <script src="/api/abpServiceProxies/Get?name=tasksystem/task" type="text/javascript"></script>
Augular架構支援

Abp架構能夠公開動態api控制器作為angularjs服務,如下所示:

    (function() {        angular.module(‘app‘).controller(‘TaskListController‘, [            ‘$scope‘, ‘abp.services.tasksystem.task‘,            function($scope, taskService) {                var vm = this;                vm.tasks = [];                taskService.getTasks({                    state: 0                }).success(function(data) {                    vm.tasks = data.tasks;                });            }        ]);    })();

我們可以將名稱注入服務,然後調用此服務,跟調用一般的js函數一樣。注意:我們成功註冊處理常式後,他就像一個augular的$http服務。ABP架構使用angular架構的$http服務,如果你想通過$http來配置,你可以設定一個設定物件作為服務方法的一個參數。

要使用自動產生的服務,需要添加:

    <script src="~/abp Framework/Framework/scripts/libs/angularjs/Abp Framework.ng.js"></script>    <script src="~/api/abp Framework/ServiceProxies/GetAll?type=angular"></script>

 

Durandal支援

ABP架構可以注入服務到Durandal架構,如下:

    define([‘service!tasksystem/task‘],    function (taskService) {        //taskService can be used here    });

ABP架構配置Durandal(實際上是Require.js)來解析服務代理並注入合適的js到服務代理。

 

 

希望更多國內的架構師能關注到ABP這個項目,也許這其中有能協助到您的地方,也許有您的參與,這個項目可以發展得更好。

歡迎加ABP架構設計交流QQ群:134710707

 

點這裡進入ABP系列文章總目錄

 

ABP(現代ASP.NET樣板開發架構)系列之20、ABP展現層——動態產生WebApi

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.