Почему Activity Pub заставляет серверы оборачивать объекты «Примечание» в действия «Создать»?
Я понял, что новые сообщения публикуются путем отправки объекта JSON-LD Activity Streams типа
Note
на почтовый ящик актера.
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Note",
"to": ["https://chatty.example/ben/"],
"attributedTo": "https://social.example/alyssa/",
"content": "Say, did you finish reading that book I lent you?"}
Затем сервер завершит его в действие типа .
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://social.example/alyssa/posts/a29a6843-9feb-4c74-a7f7-081b9c9201d3",
"to": ["https://chatty.example/ben/"],
"actor": "https://social.example/alyssa/",
"object": {"type": "Note",
"id": "https://social.example/alyssa/posts/49e2d03d-b53a-4c4c-a95c-94a6abf45a19",
"attributedTo": "https://social.example/alyssa/",
"to": ["https://chatty.example/ben/"],
"content": "Say, did you finish reading that book I lent you?"}}
Я не вижу в этом полезности, так как действие по упаковке, похоже, не добавляет никаких полезных данных к обернутой заметке. Хуже того, кажется, что это может внести изрядную избыточность в ответы (в этом базовом примере с официальной страницы ,
actor
а также
attributedTo
, а также 2
to
поля, имеют точно такое же назначение). Возможно, это сделано только для согласованности, поскольку есть несколько других типов действий, которые применяются к заметкам, и для вновь созданных сообщений, имеющих просто простой объект (или набор простых объектов) в качестве ответа, не подходит для этого способа делать вещи?
Кроме того, почему другие виды деятельности (например,
Like
) может просто ссылаться на заметки по идентификатору, а
Create
действия заключают эти данные непосредственно? Это обязательно или для этого есть особая причина?
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Like",
"id": "https://social.example/alyssa/posts/5312e10e-5110-42e5-a09b-934882b3ecec",
"to": ["https://chatty.example/ben/"],
"actor": "https://social.example/alyssa/",
"object": "https://chatty.example/ben/p/51086"}
1 ответ
ActivityStreams — это протокол для синхронизации данных между различными базами данных и программным обеспечением.
Некоторые действия содержат детали (например, для Notes), потому что мы можем создавать/обновлять их, и читатель потока активности должен знать изменения, чтобы отображать правильные данные для своих пользователей.
Некоторые операции, такие как «Мне нравится», имеют именованную операцию отмены, например «Не похоже». Поэтому нам не нужен контейнер Create/Update. и поскольку они работают с существующими данными, нам также нужен только уникальный идентификатор соответствующего ресурса.