我目前正在设计和实现PHP中的RESTful API.但是,我没有成功实施我的初始设计.
GET /users # list of users
GET /user/1 # get user with id 1
POST /user # create new user
PUT /user/1 # modify user with id 1
DELETE /user/1 # delete user with id 1
Run Code Online (Sandbox Code Playgroud)
到目前为止标准相当,对吗?
我的问题是第一个问题GET /users.我正在考虑在请求正文中发送参数来过滤列表.这是因为我希望能够在不获取超长URL的情况下指定复杂的过滤器,例如:
GET /users?parameter1=value1¶meter2=value2¶meter3=value3¶meter4=value4
Run Code Online (Sandbox Code Playgroud)
相反,我希望有类似的东西:
GET /users
# Request body:
{
"parameter1": "value1",
"parameter2": "value2",
"parameter3": "value3",
"parameter4": "value4"
}
Run Code Online (Sandbox Code Playgroud)
它更具可读性,为您提供设置复杂过滤器的绝佳机会.
无论如何,file_get_contents('php://input')没有返回请求的请求体GET.我也尝试过http_get_request_body(),但我正在使用的共享主机没有pecl_http.不确定它会有所帮助.
我发现了这个问题,并意识到GET可能不应该有一个请求体.这有点不确定,但他们建议不要这样做.
所以现在我不知道该怎么做.你如何设计RESTful搜索/过滤功能?
我想我可以使用POST,但这似乎不太RESTful.
我有一个复杂的对象要在 ASP.Net Core 3.2 中作为查询字符串传递。
public class Customer
{
public string Firstname { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address
{
public string Home_Address { get; set; }
public string Office_Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它在 Postman 中的工作方式如下:
http://localhost:52100/v1/Customer?Addresses[0].Home_Address=123HomeStreet&Addresses[0].Office_Address=123OfficeStreet
Run Code Online (Sandbox Code Playgroud)
但是,如何在地址类型为“array[object](查询)”的 Swagger 文档中传递值 http://localhost:52100/v1/swagger-ui/index.html
我在我的项目中添加了 Swashbuckle.AspNetCore 5.4.1、Swashbuckle.AspNetCore.Annotations 5.4.1、Swashbuckle.AspNetCore.Filters 5.1.1 引用
api ×1
asp.net-core ×1
c# ×1
filter ×1
http-get ×1
rest ×1
search ×1
swagger ×1
swashbuckle ×1