2017-01-02 4 views
2

Можно ли использовать разные DTO для GET и POST-действий?WebApi разные DTO для получения и публикации

Причиной этого является, как правило, большая разница между этими двумя моделями данных.

Например:

Мой пост будет выглядеть следующим образом:

/// <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; } 
} 

Поэтому я хотел бы сделать это, что я не требуется идентификатор при отправке ресурса, но пароль необходим. При использовании GET он отменяется.

Правильно ли это при использовании WebApi (создание разных Dtos для ответов и запросов)? Или есть другой способ сделать это?

+0

Правильно ли это подход или нет, это вопрос мнения. Выставлять или принимать необходимую информацию для работы системы по назначению. Каждое действие может использовать свое собственное dto. не означает, что он должен. – Nkosi

+0

Если вы используете технологию сопоставления, возможно, вы можете изменить отображение dto в соответствии со своими стандартами. –

ответ

3

Можно ли использовать разные DTO для GET и POST-действий?

Нет ничего плохого в том, чтобы иметь разные dto для разных действий.

Если api используется третьими сторонами, вы должны убедиться, что он хорошо документирован.

Правильный ли подход при использовании WebApi?

Правильно ли это подход или нет, это вопрос мнения. Выставлять или принимать необходимую информацию для работы системы по назначению.

Каждое действие может использовать свое собственное уникальное dto. Это не значит, что это нужно. Вы хотите убедиться, что вы не проливаете больше информации, чем это необходимо.

+0

Если это вопрос мнения, есть ли альтернативы? –

+0

Слишком много, чтобы вставить этот ответ, потому что * это зависит *. Ваш подход все еще может работать. – Nkosi