目前我有两个控制器
1 - 家长控制器
2 - 儿童控制器
我像这样访问我的父控制器
someurl\parentcontroller
Run Code Online (Sandbox Code Playgroud)
现在我想像这样访问我的孩子控制器
someurl\parentcontroller\1\childcontroller
Run Code Online (Sandbox Code Playgroud)
最后一个网址应该返回特定父级的所有子级.
我目前在global.asax文件中有这条路线
routes.MapHttpRoute ("Route1", "{controller}/{id}", new { id = RouteParameter.Optional });
我不确定如何实现我的parent\id\child层次结构..我应该如何配置我的路由来实现这一目标?想法?
我正在尝试重定向,而不将参数添加到我的URL.
@Controller
...
public class SomeController
{
...
@RequestMapping("save/")
public String doSave(...)
{
...
return "redirect:/success/";
}
@RequestMapping("success/")
public String doSuccess(...)
{
...
return "success";
}
Run Code Online (Sandbox Code Playgroud)
重定向后,我的网址看起来总是这样:.../success/?param1=xxx¶m2=xxx.由于我希望我的URL有点RESTful,并且在重定向后我从不需要params,我不希望它们被添加到重定向上.
任何想法如何摆脱它们?
在查询字符串中的REST URL中传递数据与请求正文的经验法则是什么?
即:你正在创建一个添加曲棍球运动员的服务.你可以选择:
PUT /players
{ "name": Gretzky }
Run Code Online (Sandbox Code Playgroud)
要么
PUT /players?name=Gretzky
Run Code Online (Sandbox Code Playgroud)
如果您传递了大量数据,则需要使用选项#1,因为URL长度有限制.但除此之外,为什么不使用查询字符串来传递数据呢?
更新:删除了您可以在浏览器中测试选项#2的注释.实现(duh)您只能在浏览器中执行GET-s.
我们有一个使用URL托管的Web应用程序http://example.com.现在我们想要扩展这个应用程序的一部分作为一个宁静的服务,我们正在讨论最好的URL模式.我搜索过,但找不到任何具体的指导.
我们应该有URL模式http://api.example.com还是http://example.com/api/v1?
对此有任何标准指导吗?
设计API端点以检查资源是否存在的最佳/宁静方式是什么?
例如,有一个用户数据库.当新用户尝试注册时,我想检查电子邮件是否已被动态使用.
我的想法是:POST /user/exists有效载荷就像是{"email": "foo@bar.com"}.响应可以是200 OK或409 Conflict.
这是一种正确的方法吗?
谢谢!
我已经在互联网上研究了宁静的API,它专注于名词而不是动词模式中的动词,但现在我看到多个链接在URL中使用动词.
这是一个例子.
- POST/v1/payments/authorization/<Authorization-Id>/capture
- POST/v1/payments/authorization/<Authorization-Id>/void
- POST/v1/payments/authorization/<Authorization-Id> /重新授权
这是Paypal apis.PayPal API
也在维基百科的HTATEOAS页面上他们举了一个例子;
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
<link rel="withdraw" href="/account/12345/withdraw" />
<link rel="transfer" href="/account/12345/transfer" />
<link rel="close" href="/account/12345/close" />
</account>
Run Code Online (Sandbox Code Playgroud)
链接:Wiki HATEOAS
任何人都可以帮我澄清一下吗?为什么'捕获','无效','存款','撤回','关闭'都在URI中,因为它们都是动词而不是名词?
或者可以在rest-full apis url中使用这些单词吗?
什么是swagger-ui以及它的用途是什么?
有没有什么好的资源可以开始使用swagger-ui?任何好的教程,博客或书籍?
我也访问http://swagger.io/,但我需要更多信息.
请指导我.谢谢你
我是服务器端Web开发的新手,最近我一直在阅读很多关于实现RESTful API的内容.我仍然坚持的REST API的一个方面是如何构建URI层次结构,以识别客户端可以与之交互的资源.具体来说,我一直在决定如何制作层次结构以及在资源由其他资源类型组成的情况下该怎么做.
这是一个有希望展示我的意思的例子.想象一下,我们有一个Web服务,允许用户从其他用户购买产品.所以在这个简单的例子中,有两个顶级资源用户和产品.这是我开始构建URI层次结构的方式,
对于用户:
/users
/{id}
/location
/about
/name
/seller_rating
/bought
/sold
Run Code Online (Sandbox Code Playgroud)
对于产品:
/products
/{id}
/name
/category
/description
/keywords
/buyer
/seller
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,每个层次结构中的对象都引用另一个层次结构中的对象的子集.例如/users/{id}/bought,某个用户已购买的产品列表,这是其中的一个子集/products.此外,/products/{id}/seller引用销售特定产品的用户.
由于这些URI引用其他对象或其他对象的子集,因此API应该支持以下内容:/users/{id}/bought/id/description和/products/{id}/buyer/location?因为如果支持这些类型的URI,那么什么是阻止这样的东西/users/{id}/bought/{id}/buyer/bought/{id}/seller/name,或者同样令人费解的东西呢?此外,在这种情况下,您将如何处理路由,因为服务器中的路由器必须解释任意长度的URI?
我正在设计一个RESTful API,我想出了一个与子资源相关的问题.
我看到其他API使用完整的URL来操作子资源.就拿例子Company has Departments和Department has Employees.
在开始我虽然关于实现所有可能的URL.导致以下结果:
方法A.
01. ### COMPANY URLS ###
02. DELETE /companies/{companyId}
03. GET /companies/{companyId}
04. POST /companies
05. PUT /companies/{companyId}
06.
07. ### DEPARTMENT URLS ###
08. DELETE /companies/{companyId}/departments/{departmentId}
09. GET /companies/{companyId}/departments/{departmentId}
10. POST /companies/{companyId}/departments
11. PUT /companies/{companyId}/departments/{departmentId}
12. DELETE /departments/{departmentId}
13. GET /departments/{departmentId}
14. PUT /departments/{departmentId}
15.
16. ### EMPLOYEE URLS ###
17. DELETE /companies/{companyId}/departments/{departmentId}/employees/{employeeId}
18. GET /companies/{companyId}/departments/{departmentId}/employees/{employeeId}
19. POST /companies/{companyId}/departments/{departmentId}/employees
20. PUT /companies/{companyId}/departments/{departmentId}/employees/{employeeId}
21. DELETE /departments/{departmentId}/employees/{employeeId}
22. GET …Run Code Online (Sandbox Code Playgroud) 重要的提示
这个问题的焦点在于API端点,它根据谁进行身份验证来区分返回哪些资源,例如Alice获得资源A和B返回,Bob获取资源X和Y.
它不是要区分返回的资源的表示.
所有端点都返回资源的JSON表示.
前言
请考虑以下三种潜在的API端点设计,即所有返回thing用户的资源.
终点A.
GET /things
Run Code Online (Sandbox Code Playgroud)
如果<user_x>请求提供了身份验证凭据,则会返回与其具体相关的thing资源.例如,验证用户Alice获得资源A和B返回,并且验证用户Bob获取资源X和Y.<user_x>
因此,不同验证用户的响应的区别在于返回哪些资源实例,而不是返回这些实例的哪些信息(即资源表示).
身份验证失败时,将返回401响应.
终点B.
GET /user/<user_x>/things
Run Code Online (Sandbox Code Playgroud)
终点C.
GET /things/?user_id=<user_x>
Run Code Online (Sandbox Code Playgroud)
如果验证用户有权访问这些资源,端点B和C都提供thing与之相关的资源实例.<user_x>thing
thing返回的资源实例的表示(例如,返回关于资源的哪些信息)可以根据哪个用户进行认证而变化.例如,<user_x>或者管理员用户可能会获得每个资源实例更丰富的数据,然后获得具有有限访问权限的用户.
验证对thing资源没有任何访问权限的用户<user_x>将获得401响应.
我的问题
我想回答以下问题:
1)端点是RESTful吗?
2)端点A是否具有良好的URI设计?
3)端点B和C是否RESTful?
4)端点B和C是否具有良好的URI设计?
我很期待你的回答.我也在下面提供了自己的答案,并对此也提供反馈表示感谢.
谢谢!
- 弗雷迪斯奈德
restful-url ×10
rest ×7
api ×3
java ×2
uri ×2
api-design ×1
c#-4.0 ×1
spring-mvc ×1
swagger ×1
swagger-ui ×1