Como mapear rotas WebAPI corretamente

Estou criando uma API para um site semelhante ao Twitter usando a API da Web e tenho problemas com o mapeamento de rotas

Eu tenho as seguintes ações para o controlador de usuário:

public User Get(string firstname, string lastname)
public User Get(Guid id)
public User Friends(Guid id)
public User Followers(Guid id)
public User Favorites(Guid id)

As rotas desejadas e a documentação gerada devem ser:

api/users?firstname={firstname}&lastname={lastname}
api/users/{id}
api/users/{id}/friends
api/users/{id}/followers
api/users/{id}/favorites

No WebApiConfig.cs eu tenho:

config.Routes.MapHttpRoute(
    "2",
    "api/{controller}/{id}",
    new { action = "get", id = RouteParameter.Optional }
);


config.Routes.MapHttpRoute(
     "1",
     "api/{controller}/{id}/{action}"
);

Como posso mapear rotas WebAPI corretamente?

questionAnswers(3)

yourAnswerToTheQuestion