2013-02-08 2 views
3

Я не уверен в том, что путь «наилучшей практики» будет использоваться для службы обслуживания на основе конвенций на основе asp.net webapi, которая должна вернуть «вспомогательное свойство» ресурса.Asp.NET WebApi Подход на основе протокола Url/Route query

например:

UsersController 

public User Get(int id) { ... } //returns named user via /api/v1/Users/23 

, но если я хочу, чтобы вернуть данную коллекцию пользователей ролей я думаю, что я хотел бы URL из /api/v1/Users/23/Roles

Если вы использовали мой апи бы вы считаете это приемлемым?

Если это приемлемо, что бы мой routeTemplate и подпись метода выглядит так (извините, если это очевидно - я действительно путают себя сегодня)

Все примеры Web API, я могу найти слишком просто и просто используйте DELETE, PUT, POST и два GET. Кажется, что ни один из них не имеет ничего похожего на вспомогательные свойства (как указано выше) или частичные ответы. /api/v1/Users/23?fields=id,name - Если кто-нибудь знает хороший пример, это было бы замечательно.

Большого спасибо

ответ

2

Роли

Роли выглядит очень разумный суб-ресурс.

Предполагая, что вам нужно будет отображать и удалять роли от пользователя с помощью http-глаголов ... тогда вы можете использовать два контроллера: один для Пользователей и другой для Ролей. Ваши маршруты будет выглядеть так:

config.Routes.MapHttpRoute(
      name: "UserApi", 
      routeTemplate: "api/v1/Users/{userId}/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/v1/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

Ваш контроллер роли бы тогда такие методы, как:

public class RolesController : ApiController 
{ 
    // GET api/v1/users/1/roles 
    public IEnumerable<Role> Get(int userId) 
    { 
     // 
    } 

    // GET api/v1/users/1/roles/1 
    public IEnumerable<Role> Get(int userId, int id) 
    { 
     // 
    } 

} 

роли в качестве частичного ответа пользователя

Для каких форматов и стандартных для использования по запросу:

apigee do a free eBook на их сайте, где они делают рекомендации по дизайну и наблюдения за существующими API.

Они описывают примеры частичного ответа от LinkedIn, Facebook и Google. Он освещен в одном из их блогов here и в их книге here.

Как с WebAPI ASP.NET

Предполагая использование JSON как тип контента, то подобный вопрос был задан до ASP.NET Web API partial response Json serialization, короче говоря вам нужно будет пройти из параметров запроса для «? Поля = "или подобное, например, в обычном ContractResolver.

+0

Фантастический. Я думаю, вы только что помогли мне провести маршрут, соответствующий прорыву :) –

Смежные вопросы