|
|
1
6
…在我看来,它不像是一个资源,它看起来像是一个远程方法调用。这里有很多业务逻辑,未来可能会发生变化。而且,这很复杂。我在设计URL时的直觉是,简单通常更好。当您将URL传递给外部合作伙伴时,这会加倍。 资源 我听到你说的不想告诉合作伙伴“创建一个活动”,但考虑到你最终可能不得不走这条路。一旦活动具有除合作伙伴标识符之外的任何属性,您几乎必须这样做。 所以我的第一个结论是,你可能应该去掉合作伙伴ID,并从活动中获得它。也要摆脱自定义,必要时使用查询字符串参数。使用查询字符串参数来指定如何返回资源(而不是资源的标识)是合适的。 去除这些收益:
好吧,这更简单,但看起来还是不对。在活动和活动ID之间,目的地在做什么?一种方法是重新安排事情:
出于某种原因,这对很多人来说看起来很奇怪,但这是完全合法的。请随意使用其他合法字符将活动与ID分开;这里的重点是a/不是唯一的选择,也可能不是合适的选择。 然而。.. 我们还没有讨论的一个问题是,如果/当用户提交了一个有效的目的地,但一个无效的活动或合作伙伴ID时,会发生什么。如果正确的答案是用户应该看到一个错误,那么上述所有内容仍然有效。另一方面,如果正确的答案是用户无论如何都应该被静默地带到目标页面,那么活动ID实际上是一个查询字符串参数,而不是资源的一部分。也许有些合作伙伴不喜欢收到一个带有问号的URL,但从纯粹的REST角度来看,如果活动ID的有效性不能决定用户的最终去向,我认为这是正确的方法。在这种情况下,URL将是:
我意识到我还没有给你一个明确的答案。问题是,这主要取决于你可能知道的商业考虑,但我当然不知道。因此,我更想介绍REST URL的理念,而不是试图向您解释您的业务。 :) |
|
|
2
3
我认为URL重写最近有点失控了。并非所有内容都属于URL。毕竟,URL应该描述一个可以搜索、发现或操纵的资源,在我看来,至少上面的合作伙伴ID和自定义字段不是资源的一部分。
|
|
3
1
向
如果你的URL看起来像:
并且您决定在将来接受第四个和第五个参数:
那么第一个URL仍然有效,因为您在{*custom}中使用了通配符。“blah/foo”将作为字符串传递给您的操作。要获得这两个额外的参数,您只需将操作中的自定义参数除以“/”即可。添加一些友好的错误处理,如果它们不存在,并且您已经成功更改了可以通过活动URL接收的信息量,而不会完全破坏现有的URL。 |
|
|
4
1
为什么不使用URL编码变量而不是路由?它们要灵活得多——你可以在未来添加任何新功能,同时仍然保持100%的向后兼容性。诚然,手动输入有点麻烦,但如果有所有这些参数,那就不容易了。
对我来说,这更能表明实际发生了什么。使用路径意味着资源存在于该位置。但实际上,你只是提供了一个具有各种参数的web服务,这个模型更清楚地捕捉到了这一点。在未来,您可以轻松添加更多参数。如果缺少默认参数,您也可以使用默认参数,而不会造成任何混乱。 不确定ASP中的代码,但实现起来应该很简单。 |
|
|
5
1
我想我会以提问的方式看待这件事。
在创建活动时,在数据库中创建一个映射,将您需要的所有数据与自动生成的id相关联。友好名称的分配方式基本上与SO上的问题相同——由用户分配——但您也可以有一个审批流程,确保它符合您的要求,并与任何现有的活动名称不同。您的跟踪公司可以通过id进行跟踪,您可以通过简单的查找将其与关联的数据相关联。 |
|
|
6
0
你所拥有的看起来很适合你的需求。这里的其他帖子都有很好的观点。但可能不适合你。在对链接进行未来验证时,您可以考虑在其中的某个位置放置一个版本号。
这样,如果你决定完全改变你的格式,你可以将版本升级到2.0(或其他任何版本),同时仍然可以跟踪进来的旧链接。 |
|
7
0
我会的
你应该考虑第一个参数的层次结构,你已经很好地管理了它。仅当存在层次结构时,才应使用路径段。 根据你的描述,目的地似乎是最广泛的参数,partnerid只适用于目的地,campaigd是特定于合作伙伴的。
|
|
|
8
0
创建一个名为的URL http://mysite.com/gateway 返回一个HTML表单,告诉您的合作伙伴填写表单并POST。根据表单值重定向。 您可以轻松地为您的合作伙伴提供javascript来执行GET和POST。应该是微不足道的。 |
|
|
9
0
关于REST URL,我学到的最重要的事情通常深藏在一些书或文章中:
除此之外,我完全同意Craig Stuntz的观点 |