UUIDs aren’t human readable.
{
"actor": "https://alice.example",
"type": "Create",
"object": "https://alice.example/some-object"
}
{
"1a7894b3-4b45-4847-8b67-c6b7fa83e0b2": "https://alice.example",
"8afd3d3f-57c3-43dd-99d7-9b5a49b5fa04": "fb454051-8c25-4c4e-a00b-4164a71a883b",
"ab389f13-fe41-4d9f-b09e-6c39794cdcf3": "https://alice.example/some-object"
}
HTTP(S) URIs can look ugly, but they at least generally provide some human meaning, and they have a chance at returning some useful information if you try to fetch them. They also have an authority component built-in, so for example only the W3C can rightfully assign identifiers on www.w3.org
.
{
"https://www.w3.org/ns/activitystreams#actor": "https://alice.example",
"http://www.w3.org/1999/02/22-rdf-syntax-ns#type": "https://www.w3.org/ns/activitystreams#Create",
"https://www.w3.org/ns/activitystreams#object": "https://alice.example/some-object"
}
Prefixes look a little better, but require everyone to agree on consistent prefixes. In this case, I’m using as
for ActivityStreams, and I’m using rdf
for RDF Syntax. This is a workable option if you’re willing to accept the requirement of ahead-of-time communication with the entire known universe, present and future.
{
"as:actor": "https://alice.example",
"rdf:type": "as:Create",
"as:object": "https://alice.example/some-object"
}
You can combine prefixing and reverse FQDN, also. ATProto’s Lexicon does pretty much this.
{
"org.w3.www.activitystreams.actor": "https://alice.example",
"org.w3.www.rdf.type": "org.w3.www.activitystreams.Create",
"org.w3.www.activitystreams.object": "https://alice.example/some-object"
}