问题标签 [url-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
api - 以下哪一项是更好的 Rest URL?
只是一个快速的问题。以下哪一项是更好的 Rest API Url,为什么会这样?
GET shop/department/{id}/{action}
GET shop/department/{action}/{id}
动作是动词,它可以是:
GET shop/department/{id}/download
GET shop/department/{id}
GET shop/department/{id}/receive
javascript - AJAX 是否应该使用标签 /#!/?
我制作了一个具有 URL 形式的网页http://www.example.com/module/content 这是一个非常动态的网页,实际上它是一个网络应用程序。
为了使其尽可能响应,我想使用 AJAX 而不是普通的页面请求。这也使我能够使用 JavaScript 添加一个层以提供离线功能。
我的问题只是:我应该如何制作 URL?它们应该是http://www.example.com/module/content还是http://www.example.com/#!/module/content?
以下只是我在两个方向上的想法。如果您对此已有清晰的想法,则无需阅读。
我想使用第一个版本,因为我想支持新的 HTML5 标准。它易于使用,而且 URL 看起来很漂亮。但更重要的是它允许我这样做:
如果用户请求一个页面,它将返回一个完整的 HTML 页面。
如果用户然后单击一个链接,它将仅通过 AJAX 将内容插入到容器 div 中。
这将使没有 JavaScript 的用户能够使用我的网站,因为它不需要使用 JavaScript,它只会使用普通的“点击链接-请求-获取完整的 html 页面”-方法。
虽然这很好,但问题当然是 Internet Explorer。只有最新版本的 IE 支持 History API,并且要在旧版本中使用此功能,需要使用主题标签。(我的 50% 的用户将使用 IE,所以我需要支持它......)所以我必须使用 /#!/ 让它工作。
如果同时使用这两种 URL 版本,就会出现问题,即如果 IE 用户将此链接发布到网站,Google 将向服务器发送一个 _unescaped_string(或类似的..),并且它会将带有 IE 版本的页面与井号。有些页面将没有主题标签。
正如我们所记得的那样,在许多不同的事情上,非主题标签会更好。那么,这个搜索引擎问题能被规避吗?是否可以告诉 GoogleBot 如果它正在访问网站的主题标签版本,它应该被重定向到网页的非主题标签版本?这样一来,人们可以获得非标签 URL 的所有好处,并且仍然支持 IE6-IE9。
你认为最好的方法是什么?也许你自己在实践中尝试过?感谢您的回答!
rest - 休息设计原则
以下是列出客户所有订阅的良好休息设计实践:
[BaseUrl]/subscriptions/[accountid]/payTV
[BaseUrl]/subscriptions/[accountid]/paywall
等...
或者应该是:
[BaseUrl]/subscriptions/payTV?[accountID]
[BaseUrl]/subscriptions/paywall?[accountID]
等...
或者是其他东西?
http - 一个网站也应该是一个网络资源吗?
每个 Web 应用程序 - 每个网站 - 都是一项服务。(...) 使 Web 站点易于网络冲浪者使用的特性也使 Web 服务 API 易于程序员使用。
Richardson 和 Ruby,“RESTFul Web 服务”
正如我所期望的那样,一个同时也是 Web 服务的网站根据用户代理请求的内容提供其资源的多种表示形式。API,可以这么说,是网站本身,并不单独提供。
许多流行的“REST API”并非如此。例如,Twitter 的 API 位于http://api.twitter.com/1/,URI 中的“1”是 API 本身的版本。Socialcast 还在https://demo.socialcast.com/api/提供了一个 REST API ,第三级名称是它所寻址的网络的名称。
这对我来说似乎是错误的。如果我在http://www.example.com/blog有我的博客,我不需要在不同的位置提供 API,只为机器人提供 JSON。与其拥有http://www.example.com/blog/posts/和http://api.example.com/blog/posts这两个不同的 URI,我应该只拥有前者,并且可以使用多种表示形式,其中application/json
对于我希望提供给我的用户的 JSON API。
示例 1:浏览器询问我博客上的帖子;
要求:
回复:
示例 2:相同的 URI,但这次是机器人发出请求;
要求:
回复:
API 的版本号应编码在请求标头的“Accept”字段中,最重要的是避免像 Twitter 那样强烈键入 URI(“statuses/show.json?id=210462857140252672”或“statuses/show/210462857140252672.json ”)。
如果采用统一的方法,我可能会失去一些灵活性(但是,Cool URI 不应该永远不会改变吗?),但我认为坚持 REST(或至少我对它的解释)会提供更多好处。
哪种方法更正确:分离 API 和网站,还是统一它们?
java - REST 超媒体/指向集合的链接
REST 最佳实践的一部分是利用响应中的链接来允许客户端从一个实体导航到另一个实体。
例如,如果我有一个具有子帐户的客户对象类型。如果我要求客户使用,/customers/1
那么我可能会提供以下回复
请注意,该self
属性包含链接。
但是,假设我不想在客户查询中返回帐户,也许帐户数量可能非常大,所以我不想默认返回它们。
客户帐户的资源 URL 可以是/customers/1/accounts
但是,由于上面的客户响应,客户将无法发现该/customers/1/accounts
链接。
是否有在响应中提供指向返回资源的“子”集合的超链接的最佳实践?
http - 以三元组为参数的 REST 资源
当需要创建一个采用有限参数集的 URL 时,其中所有所述参数在语义上都是相同的“级别”,目前围绕在 URL 中使用分隔符的共识是什么?这是一个例子:
也就是说,这里的参数可以是单个、一对或三个。它们可以按任何顺序指定,因为它们不是逻辑树,而 thing2 不是 thing1 的从属资源,所以这样做似乎是“错误的”:
这让我很困扰,因为它暗示了三元组元素之间的树状关系,但事实并非如此(尽管许多 HTTP 框架似乎都在推动这一点,但在我看来是错误的)。此外,使用查询字符串感觉不对,因为这不是搜索操作,它是一个非常有限空间中的已知三元组——可以说,没有什么可查询或搜索的。
我想另一种选择是让它成为一个POST
请求并提供一个详细说明所提供的三元组部分的正文。出于某种原因,这并没有给我带来温暖的模糊感。
其他人是如何处理这个问题的?分隔符对我来说似乎很干净,并且传达了资源的预期语义,但我知道有些人会采取不同的观点,我希望了解其他有类似用例的人的经验。
rest - 如何在 REST API 中定义编辑页面?
在我正在设计的 Play 应用中,这些是我的一些路线
我也支持浏览器界面。我正在按照我在这里看到的指导进行操作: RESTful on Play!框架
我可以轻松地提供一个 HTML 模板来显示有关特定访问的详细信息或访问列表。但是,“编辑页面”如何完全落入其中,必须预先填充来自特定访问的信息?我可以轻松地执行以下操作:GET /visits/:id/edit controllers.Visit.edit(id: Long)
这将返回一个包含访问信息的预填充页面,或者我可以拥有一个静态 HTML 页面,该页面/visits/:id
使用 AJAX 调用来填充字段,这将让我避免损坏我的资源驱动 API带有浏览器页面特定的路由。还是有更好的选择?什么是最佳实践,为什么?
url - 规范网址和本地化
在我的应用程序中,我的本地化 url 看起来像这样:
- http://examle.com/en/animals/elephant
- http://examle.com/nl/dieren/olifant
- http://examle.com/de/tiere/elefant
这个问题主要针对Facebook Likes,但我想当我开始考虑搜索引擎爬虫时,我会遇到类似的问题。
您期望什么样的网址作为规范网址?我不想使用确切的英文网址,因为我希望点击链接的人将被转发到他们自己的语言(浏览器设置/依赖于 IP)。
IP 查找不是我想要在每个页面点击时都做的事情。除此之外,我还需要在我的应用程序中加入更多的“状态”,因为我必须检查用户是否已经被转发到他自己的语言环境,或者是否有意浏览英文版本。
我想它会是这样的:
http://example.com/something/animals/elephant
或者可能根本没有任何语言标识符:
http://example.com/animals/elephant
但这有点难以实现,将来发生 url 冲突的机会更大(在极少数情况下,我会得到一个名为en或de的类别)。
概括
您期望什么样的网址作为规范网址?是否已经为此制定了标准?
node.js - 决定路线与参数的关键因素是什么
我看不到在两种路线因素之间做出决定的依据。我的问题是什么因素是决定之间的关键:
- 更多路线 - 更少的参数
- 更少的路线 - 更多的参数 - 处理程序中的逻辑
下面的两个示例是我的实际案例,但我认为这是一个普遍的问题。
我的基线是 2 条路线,每条路线有 2 个参数:
备用因式分解是 1 个具有 3 个参数的路由。
这两个似乎和我差不多。区别在于路由表中有一个分支,而 mymodule 中有一个 if 分支。是否存在缓存、记忆或其他因素使平衡倾向于这些因素之一?客户端是否有影响?