如果这个 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:工作历史

我需要为 Facebook Graph API 提交 App Review 吗?

Facebook 的 Graph API 是不是使用 GraphQL?

如何使用 Facebook GRAPH API 删除 Facebook 评论帖子?

使用 facebook graph api 允许更多页面

如何使用 Graph API 获取家乡的 facebook 好友列表?