2012年9月10日 星期一

[UML] 案例圖範例一


今天參考書上畫的案例圖,來做一些筆記:

1. Customer 可以做為 Member 一般化的父角色。 因為Customer連接的所有案例,Member也會用到。
2. Provide Suggestion(顧客意見) 和 Order (下訂單) 如果在未登入的情況下,會<<extend>> 出 Login這個案例。 Order (下訂單) 如果在非會員的情況下,會<<extend>> "Join as a member"案例。

3. Order (下訂單)和Modify member info (修改會員資料) 一定會引發Send confirmed Email這個案例。 所以要使用 <<include>>這個關係。

4. 角色可以是 人, 時間, 系統 ... 等實體或非實體,有點像是觸發事件的Trigger。


[MVC4] 建立第一支Web Api


[MVC4] 建立第一支Web Api
作者 : JB

MVC4
Web api是走Restful的網路服務架構,在開發流程上與WCF Restful service很像。

 
1. 請先下載安裝ASP.NET MVC4
http://www.microsoft.com/zh-tw/download/details.aspx?id=30683
(
此連結的下載是For Visual Studio 2010)
2. 以下以Visaul Studio 2010為範例。

開新專案:
Web】→【ASP.NET MVC 4 Web Application


會跳出以下這個畫面,選擇Web API,然後可選擇要不要建立單元測試專案。
 

 
3.      建立好之後,可看到方案總管,的確跟一般MVC專案一樣有Model, View, Control。 不過因為基本上不會動到View J

 


 

 
4. 打開Control資料夾下面的「ValuesController.cs
可看到裡面定義了四個Restful Service的方法
 
// GET api/values
public IEnumerable< string > Get()
{
  return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
  return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}

5.       接著我們來看定義routes的地方,開啟App_Start資料夾下面的WebApiConfig.cs
會看到以下的程式碼
     public static void Register(HttpConfiguration config)
    { 
          config.Routes.MapHttpRoute(   name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

很清楚的可以看到
routes定義為 api/{controller}/{id}{controller} : 你的Control名稱{id} : 帶入的值(參數),而id = RouteParameter.Optional 則定義此欄位為非必要。
 
6.    接下來就直接來跑看看吧! 執行(F5)Web API,會出現如下的畫面:




 
7.       測試GET方法

在網址後面加上 http://localhost:XXXX/api/values
瀏覽器應該會問你要不要下載檔案,這個就是Web API回傳回來的JSON資料,打開這個檔案會看到
["value1","value2"]

下圖是用Fiddler看的結果
 


備註:如果我們要讓使用者在GET方法時,動態選擇取得的response格式為XMLJSON,做法如下:

打開Global.asax.cs,在Application_Start方法中加入下列紅色的程式碼。
PS.
必須參考 using System.Net.Http.Formatting

//
設定一個URL的新參數
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("json", "true", "application/json"));
//設定一個URL的新參數
GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("xml", "true", "text/xml"));

這兩行表示我們可以在URL中加入jsonxml兩個參數,來設定是否開啟json/xml回傳格式。

所以預設回傳json格式的URL可以改打
http://localhost:63435/api/values?id=10&json=true

如果要拿到xml格式,就改打以下網址
http://localhost:63435/api/values?id=10&xml=true


 
8.       測試POST方法
新增一個類別 CItem,裡面放兩個String變數value1value2
然後修改 POST函式:

// POST api/values
public CItem Post()
{
CItem myItem = new CItem();
myItem.value1 = "HI";
myItem.value2 = "HELLO";
return myItem;
}

打開Fiddler,如下設定,
如果要得到XMLresponse就在 Request Headers裡面打入
content-Type: text/xml


按下執行後的結果:
 

 
9.      恩,如果我們不想使用專案預設的ValuesController,可以自己新增一個,如 JBController”。 至於依原始routes設定,呼叫rest方法的URL就要改成
http://localhost:XXX/api/JB