我正在为我们的应用程序开发一个新的RESTful Web服务.
在某些实体上执行GET时,客户端可以请求实体的内容.如果他们想要添加一些参数(例如排序列表),他们可以在查询字符串中添加这些参数.
或者,我希望人们能够在请求正文中指定这些参数. HTTP/1.1似乎没有明确禁止这一点.这将允许他们指定更多信息,可以更容易指定复杂的XML请求.
我的问题:
我正在寻找一种合理的方式将搜索表示为RESTful URL.
设置:我有两个模型,汽车和车库,汽车可以在车库.所以我的网址看起来像:
/car/xxxx
xxx == car id
returns car with given id
/garage/yyy
yyy = garage id
returns garage with given id
Run Code Online (Sandbox Code Playgroud)
汽车可以独立存在(因此/汽车),也可以存在于车库中.例如,在给定车库中代表所有车辆的正确方法是什么?就像是:
/garage/yyy/cars ?
Run Code Online (Sandbox Code Playgroud)
车库yyy和zzz中的汽车联盟怎么样?
什么是代表搜索具有某些属性的汽车的正确方法?说:给我看看所有带4扇门的蓝色轿车:
/car/search?color=blue&type=sedan&doors=4
Run Code Online (Sandbox Code Playgroud)
或者它应该是/汽车而不是?
使用"搜索"似乎不合适 - 什么是更好的方式/术语?应该只是:
/cars/?color=blue&type=sedan&doors=4
Run Code Online (Sandbox Code Playgroud)
搜索参数应该是PATHINFO还是QUERYSTRING的一部分?
简而言之,我正在寻找跨模型REST网址设计和搜索的指导.
[更新]我喜欢贾斯汀的答案,但他没有涉及多字段搜索案例:
/cars/color:blue/type:sedan/doors:4
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我们怎么样
/cars/color/blue
Run Code Online (Sandbox Code Playgroud)
到多场案件?
如何支持GETGUID和整数的路由?我意识到GUID不是理想的,但它现在就是它.我想添加对整数的支持,以便用户更容易记住和传达应该是唯一的"密钥".
示例路线:
testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1
testcases/1234
Run Code Online (Sandbox Code Playgroud)
我的WebApiConfig:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
var routes = config.Routes;
routes.MapHttpRoute("DefaultApiWithAction",
"Api/{controller}/{action}");
routes.MapHttpRoute("DefaultApiWithKey",
"Api/{controller}/{key}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Get), key = @"^\d+$" });
routes.MapHttpRoute("DefaultApiWithId",
"Api/{controller}/{id}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
routes.MapHttpRoute("DefaultApiGet",
"Api/{controller}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
routes.MapHttpRoute("DefaultApiPost",
"Api/{controller}",
new { action = "Post" }, …Run Code Online (Sandbox Code Playgroud) 我正在为Windows Phone 8.1应用设置后端。我正在使用ASP.net WebApi创建用于从数据库访问数据的RESTful api,该API是在Windows Azure上设置的。
这是我的路线的样子:
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultNamedApi",
routeTemplate: "api/{controller}/{name}",
defaults: new { name = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我想要实现的是不使用整数访问数据-我想使用字符串访问数据。这是我的WebApi控制器的代码:
private SmokopediaContext db = new SmokopediaContext();
// GET api/Images
public IQueryable<ImageModel> GetImageModels()
{
return db.ImageModels;
}
// GET api/Images/5
[ResponseType(typeof(ImageModel))]
public IHttpActionResult GetImageModel(int id)
{ …Run Code Online (Sandbox Code Playgroud)