如果这个 Facebook Graph API 是安静的
Posted
技术标签:
【中文标题】如果这个 Facebook Graph API 是安静的【英文标题】:If this Facebook Graph API is restful 【发布时间】:2018-02-19 15:54:02 【问题描述】:Facebook 有一个 API 可以获取您的照片:
GET graph.facebook.com
/me/photos
/me/ 是登录人的 Id 的快捷方式。这是在会话中引入状态,因此是安静的吗?
这样做不是更安宁吗:
/user/1234/photos
然后有一些安全层来确保只有具有适当令牌的用户才能访问该 URL?
https://developers.facebook.com/docs/graph-api/using-graph-api
注意到其他一些地方使用这种模式。例如:
为获取所有优惠券进行条纹操作:
GET https://api.stripe.com/v1/coupons
Paypal 对所有付款执行此操作:
GET /v1/payments/payment
https://developer.paypal.com/docs/api/payments/
【问题讨论】:
/me 与谁可以访问什么无关。这只是一条捷径。 【参考方案1】:REST 是一种提供计算机系统之间互操作性的概念/方法/方式。
REST 不是标准,由委员会/组织根据严格规定批准。
虽然存在架构限制、建议、不成文规则、通用解决方案,但您无法真正肯定此是休息或此不是休息。每个人都按照自己认为更好的方式设计服务。
Graph API 并不完全是 REST,它们只是不同的事物/含义。
相关FB/me
他们说:
/me 节点是一个特殊的端点,它转换为 访问令牌为的人(或 Facebook 页面的 page_id) 当前用于进行 API 调用。
由于这个 URI 依赖于经过身份验证的用户,它有什么问题?
与 PayPal 相关,我认为您更喜欢 /v1/payments/payment
而不是 /v1/payments/35/payment
,但部署给另一个客户的同一个应用程序将是 /v1/payments/69/payment
或像 /v1/user/35/logout
这样的注销。
一切都是为了方便。
【讨论】:
【参考方案2】:GraphQL 不平静,我试着总结一下here。
/me
不一定引入状态,因为me
的 id 可能在 headers 中,所以服务器端仍然可以是无状态的。
是在会话中引入状态,因此是 安静吗?
事实上,无国籍状态是休息的限制因素,因此您必须将您的问题重新表述为“......因此它不休息吗”
但是 REST 严重依赖 URI,所以这个快捷方式绕过了 URI 中的透明性,根据 RESTful 原则,这不是最好的想法。
【讨论】:
以上是关于如果这个 Facebook Graph API 是安静的的主要内容,如果未能解决你的问题,请参考以下文章
我需要为 Facebook Graph API 提交 App Review 吗?
Facebook 的 Graph API 是不是使用 GraphQL?