基于 Solid 开发应用的一些基础问题

嗨,大家好,

我是一名后端开发人员,有4到5年的社交应用后端开发经验(最新的项目链接 keakr.com),我在开发现实社交系统方面积累了很多经验。 我现在正在开发一个新项目 - 另一个社交应用程序 - 我们基于Solid开发。 我现在已经掌握了Solid的基本工作流程,但我很难将它们联系到实际的应用层面。
我想最好的方法是列举一些典型的用户流程,并弄清楚如何用 Solid 实现它们。 请随意评论,拍砖,或者点赞。 我会用 [?] 来表示开放式问题。 也许他们篇幅很长,但希望可以让使用 Solid 的开发人员受益!

注册
可以通过使用电子邮件/密码创建帐户或使用其他社交平台的三方的登录。 在 Solid 的情况下:

我们会使用 WebID,如果用户已经拥有一个,我们让他直接登录,如果没有就在我们的服务器上帮他创建一个
用户也需要一个 POD,所以同样的逻辑:要么让我们访问他现有的 POD,要么与我们帮他创建一个。

用户发帖
这也是一个常见的用户操作。但我们不将帖子及其相关内容存储在我们的数据库中,而是将它们存储在用户的 POD 中。
[?]我们要不要首先创建一个目录来存储来自我们应用程序的所有数据?

列出用户的帖子
这是让我感到十分费解的地方。如果用户想列出所有他发的帖子,我们需要从他的 POD 中读取,但是我们在列出之前想先对数据进行处理(比如我们要从帖子的内容中根据关键字进行搜索,或者根据创建日期对帖子排序)。那么我要怎样才能做到这一点?我知道需要使用 SPARQL(SPARQL Protocol and RDF Query Language)查询语言。但如果用户的 POD 不支持某些我们需要的 SPARQL 查询结构怎么办?

分享帖子
在我们的数据模型中,帖子不会被自动分享给其他人,而是要被楼主自己分享出去。我认为这些分享出去的内容将采用目标 POD 中的三元组形式,并指向作者 POD 中的内容。

列出分享的帖子(或显示“摘要”)
如果我们想显示所有分享给某些用户的帖子,我们首先会列出之前提到的“共享”三元组,但是然后[?]我们需要查看所有被分享的用户的 POD 来构建返回结果吗?(同时考虑过滤和排序的情况)
由于目前我们的数据都是存储在一个中央数据库,也有一些优化查询和索引的方法,但对于上述情况,我目前还没找到一种优雅的解决方法。如果某些用户的 POD 关闭或者响应速度很慢,则会严重影响应用的整体性能。
我还有很多其他问题。没准我的问题出发点就是错的。感谢任何回复,并期待讨论。
Thomas

「共享机制没有限制 web 应用如何利用这些数据(*)」这个是错的,根据 https://learnsolid.cn/docs/#/acl/wac?id=添加受信任的互联网应用 你的朋友可以限制他的数据只能被你用某几个可信的应用来访问

@clarence 感谢翻译,希望能顺便给出原文链接

这个问题还蛮严重的

这的确是一个非常基础的问题

谢谢Jorn的回答。应用程序的确可以在自己的数据库中对 POD 中的数据进行索引,但正如你所说它已经背离了Solid的精神,而且还会存在数据同步问题(用户 POD 上的数据更新或删除时,服务器也必须进行同步。也许可以通过的发布/订阅机制来实现?)

我很想听听 Solid 发起人的意见。 据我所知,Solid 已经被构建为社交应用程序的基础,我所描述的用例在这些应用程序中非常常见。也有可能我没说到点上。

关于列出数据和搜索的一些想法:从 POD 读取用户的数据然后用 ajax 把他们发到服务器,从而在服务器上把用户的数据复制下来。然后供你的用户搜索。但这似乎违背了Solid的精神......

现在确实存在一些问题:作为用户,我授予 web 应用程序访问我的数据的权限,同时也间接授权了访问我的好友的数据(他们选择与我共享的数据)的权限。但由于共享机制没有限制 web 应用如何利用这些数据(*),结果,web 应用就可以收集我的朋友数据并使用 ajax 将其发送到他们自己的服务器,而不必经过我的朋友同意 - 我的朋友认为他们只和我分享了数据 - 但实际上他们还和我使用的那些能够读取我的 POD 的 web 应用分享了数据。

Solid 是一个很好的概念,但是涉及到隐私的地方也有很多问题(目前据我所知是这样的——希望有人来证明我是错的)。另请参阅我的另一篇帖子:Inter-app access control

(*)共享应该只是授予其他用户访问你的数据的权限,而不用担心你选择使用的 web 应用程序。