2017-01-02 9 views
2

GETとPOSTアクションに異なるDTOを使用しても構いませんか?WebApi GetとPostのための異なるDTO

これは、通常、これら2つのデータモデルに大きな違いがあるためです。例えば

私のPOSTは次のようになります。

/// <summary> 
/// Add new user 
/// </summary> 
/// <param name="item">User data</param> 
/// <returns>Newly added user id</returns> 
[HttpPost] 
public IHttpActionResult Post([FromBody] UserDto item) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    var model = _mapper.Map<User>(item); 

    int itemid = _usersRepository.Insert(model); 

    return Ok(itemid); 
} 

public class UserDto 
{ 
    private string _password; 

    [Required] 
    [StringLength(100, ErrorMessage = "Name {0} must consist of at least {2} letters.", MinimumLength = 6)] 
    public string Name { get; set; } 

    [Required] 
    public string ExternalName { get; set; } 

    [Required] 
    public bool Active { get; set; } 

    [Required] 
    public string Password 
    { 
     get { return _password; } 
     set { _password = value.Hash(); } 
    } 
} 

と私のGETは、次のようになります。

/// <summary> 
/// Get all users 
/// </summary> 
/// <returns>Users list</returns> 
[HttpGet] 
[ResponseType(typeof(List<UserInfoDto>))] 
public IHttpActionResult Get() 
{ 
    IList<UserInfoDto> values = _usersRepository.SelectAll(); 

    if (values == null || !values.Any()) 
     return Ok(); 

    return Json(new { collection = values }); 
} 

public class UserInfoDto 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string ExternalName { get; set; } 

    public bool Active { get; set; } 
} 

私はこれを行うだろう理由はIということですリソースをポストするときにIdが必要ではないが、パスワードが必要である。 GETを使用するときは逆になります。

WebApi(レスポンスとリクエストに異なるDtosを作成する)を使用する場合、これは正しいアプローチですか?あるいは、これを行うための他の方法がありますか?

+0

これが正しいアプローチかどうかは、意見の問題です。意図したとおりにシステムが実行するために必要な情報を公開するか、受け入れる。各アクションは独自のdtoを使用できます。それがすべきことを意味するものではありません。 – Nkosi

+0

マッピング手法を使用している場合は、標準に合わせてdtoのマッピングを変更できます。 –

答えて

3

GETアクションとPOSTアクションで異なるDTOを使用しても構いませんか?

さまざまな操作に異なるdtoがあることは間違いありません。

apiが第三者によって使用されている場合は、そのAPIが十分に文書化されていることを確認することをお勧めします。

これはWebApiを使用するときの正しいアプローチですか?

これが正しいアプローチかどうかは、意見の問題です。意図したとおりにシステムが実行するために必要な情報を公開するか、受け入れる。

各アクションは独自のdtoを使用できます。それはすべきことではありません。あなたは、必要以上に情報を漏らさないようにしたいと思っています。

+0

これは意見の問題であれば、何か代替手段がありますか? –

+0

*この答えに入れるべきものが多すぎます。あなたのアプローチはまだ機能します。 – Nkosi

関連する問題