Introducing Azure Mobile Services – Script and Custom API

摘要:Introducing Azure Mobile Services – Script and Custom API

/黃忠成

 

 

Script in Azure Mobile Services

 

 在最初的文章中提到,Azure Mobile Servcies主要的目的是把原本該由我們自行租用虛擬主機、撰寫後端程式的工作簡化,還有提供資料儲存的機制,談到後端程式就不得不提到自訂API供使用者呼叫,

還有資料儲存的驗證動作,在Azure Mobile Services中,這是透過Script來完成的,這個Script語言目前是以Node.js為主,未來會提供.NET Language版本。

 

Handling CRUD operations via Script

 

  當App對Azure Mobile Services中資料修改時,總是要進行一些驗證或是後續的處理,在Azure Mobile Services中,開發者可以針對每一個資料表撰寫CRUD的Script。

圖1

舉例來說,我們可以在Script驗證使用者新增的資料某部分的欄位是否正確。

圖2

當使用者輸入的Name欄位為空白時,就會在InsertAsync函式拋出例外。

圖3

 

Building Custom API

 

  開發者也可以用Script來寫API,這個API是以標準的RESTful Services方式存在,因此不限定於哪種平台才能呼叫,Auzre Mobile Services也提供了iOS及Android專用的SDK讓客戶端呼叫更方便

在Custom API中,開發者也可以存取所有的資料表,舉個例來說,我們可以撰寫一個API來回傳特定地址的資料列。

圖4

如果需要的話,開發者也可以針對API呼叫設定權限。

圖5

圖6

下面是這個Script的文字版。


exports.get = function(request, response) {   

    var mssql = request.service.mssql;

    var sql = "SELECT Name,Address,Tel FROM Customers WHERE Address = ?";

    mssql.query(sql, [request.query.addr], {

        success: function(results) {        

                response.json(results);

        }

    })   

};

 

 

客戶端可以透過以下程式碼呼叫。


private async void ApplicationBarIconButton_Click_1(object sender, EventArgs e)

        {

            var result = await App.MobileService.InvokeApiAsync("getwithaddress",HttpMethod.Get,                 

                   new Dictionary

                   {

                      { "addr", "taiwan"}

                   });


            foreach (var item in result)

            {

                //access record with item["fieldName"]

                //like item["Name"]

            }


        }

 

 

 

 

Using Schedule Jobs

 

  除了可以在CRUD、CUSTOM API中使用Script外,開發者也能夠撰寫Script然後要求Azure Mobile Services特定時間周期來執行。

圖7

圖8

圖9

然後透過ENABLE來啟用。

圖10

以本例來說,15分鐘後可在LOG中看到資訊。

圖11

Script能做的事情非常多,例如存取已登入的使用者資料(Google、Facebook等),送出Push Notification,讀者可參考以下連結。

 

http://msdn.microsoft.com/en-us/library/windowsazure/jj554226.aspx