2011-05-12 31 views
1

我正在爲我的ASP.NET應用程序編寫一個其他開發人員將使用的API。 API基本上會以名字,姓氏和ID返回人員列表。有許多方法可以在ASP.NET中編寫Web服務,最簡單的方法是創建一個返回DataTable的Web服務函數(asmx)。對於其他.NET開發人員來說,這很簡單,但我不相信這是編寫Web服務以實現一般平臺和語言獨立性的最佳方式。寫一個Asp.Net Web服務的最佳方式在野外很好玩

目前接受的標準是什麼編寫這樣的Web服務,今天在野外玩的很好?

回答

3

浮現在腦海從經驗中的一些想法:

  1. 使用WCF,不.ASMX。 WCF完成與ASMX文件所做的所有相同的事情,並且通常替代ASMX服務(請參閱herehere)。
  2. 使用簡單POCO數據類型的寫入方法,如List<Person>而不是DataTable。基本類型更容易序列化,並且在其他編程環境中更具意義,因爲您希望您的服務獨立於語言。
  3. 提供管理數據的通用CRUD方法。根據您的服務如何使用,如果用戶需要修改數據,一種簡單的方法是提供使用相同數據類型的getBlah()updateBlah(obj newObj)deleteBlah(obj objToDelete)等。
  4. 隱藏服務使用者不需要知道的細節,而不是像現在一樣盲目暴露所有數據類型,結構和字段名稱。這將使您的服務更加健壯地處理內部更改,並且可以簡化和控制最終用戶看到的內容。例如,如果您的Person類具有30個屬性,並且只有5個與最終用戶相關,請提供一個在PersonPersonSimple類之間進行接口的類,該類已公開。沒有這一層,每當你改變你的數據結構時,你的最終用戶將不得不修改你的代碼,並且你將被這種緊密耦合所鎖定。

如果安全是非常重要的

  1. 通過SSL執行服務。這可以保護通過線路傳輸的數據免受嗅探。
  2. 使用身份驗證,可以使用登錄方法和會話或SOAP頭。默認情況下服務是匿名的,除非有某種認證方案。即使您認爲沒有人會找到您的服務,因爲您只向用戶提供URL,但它會以某種方式在某處出局,並且在這種情況下人們會嘗試濫用該服務。另外,你可以控制誰可以通過不同的登錄和授權方案來做什麼。
+0

很好的答案,但你能根據你的經驗提供一些關於你的想法的原因的細節? – 2011-05-12 15:38:48

+0

@Gorge:我已經用一些解釋更新了我的帖子。希望這可以幫助! – mellamokb 2011-05-12 15:47:44

0

我目前正在處理類似的問題:.NET中的web api服務接收數據表作爲輸入參數,對它們應用一些操作(使用表值函數),並返回一些輸出數據表。

就你而言,你不需要使用像DataTable這樣的複雜類;你可以使用一個簡單類的數組(列表<>),其中包含名字,姓氏和ID等字段。使用ASP.NET的Web API,您可以執行以下操作:

1)在Visual Studio中創建一個新的WebApi項目:例如(在VS 2012中)C#> Web> ASP。NET MVC 4 Web應用程序>選擇 「WEP API」 作爲項目模板

你會看到有很多文件夾的VS項目,其中包括一個名爲模型

如需幫助請參見:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

2)與像一個類中創建一個新的模型代碼文件Person.cs如下:

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string[] Friends { get; set; } 
} 

3)建立電子新控制器代碼文件PersonController.cs用於獲取,插入和更新數據庫記錄的方法。所有必需的序列化/反序列化(JSON和XML)和數據綁定都是由項目模板設置的Web Api環境自動完成的。

// Get all the records of persons 
    public IList<Person> Get() 
    { 
     // read database into a list of persons (List<Person>) 
     // return List<Person> 
    } 

一個選擇的人的返回記錄:

public Person Get(int id) 
    { 
     // read database for a selected person 
    } 

參數結合(讀取由HTTP POST發送到的對象的JSON/XML內容,或者到一個列表中的對象)也自動進行,如容易如下:

// parameter binding: Create a Person object with content from XML/JSON 
    public void ReadPerson(Person p) 
    { 
     Trace.WriteLine(Person.Id); 
    } 


    public void ReadPersonList(List<Person> plist) 
    { 
     Trace.WriteLine(plist.Count); 
    } 
相關問題