In this article I will try to show how you can implement a very simple version of Microsub yourself.
Let's start
The protocol for Microsub consists of a number of actions. The actions can be provided with a parameter action
to the microsub endpoint. When implementing a Microsub server it's possible to create a version of responses where you don't need to implement the full thing. It depends on what you want to use. At the moment we will only implement channels
and timeline
.
Simplified channels
For example the channels
action provides 4 different functions in the full implementation.
- Get a list of the available channels
- Create a new channel with a name
- Update the name of a channel
- Delete a channel
A great way to start is to only return a fixed number of channels. That way you only implement function 1 and only return a successful response for functions 2, 3 and 4. Clients will work when you do this and it becomes a lot easier to implement.
As an example in PHP:
if ($_GET['action'] == 'channels') {
$channels = [
[ 'name' => 'Notifications', 'uid' => 'notifications' ],
[ 'name' => 'Home', 'uid' => 'home' ],
];
header('Content-Type: application/json');
echo json_encode(['channels'=>$channels]);
}
Simplified timeline
The timeline
action provides 1 function. There are 2 parameters that allow paging. For a simplified version this does not need to be implemented.
The timeline
action should return a response that looks like this:
{
"items": [
{ ... },
{ ... }
],
"paging": {}
}
By leaving paging
empty you signal to the client, that there are no pages available at the moment.
The items
array should be filled with JF2 items. JF2 is a simplified version of Microformats 2 that allows for easier implementation by clients and servers. An example could look like this:
{
"type": "entry",
"name": "Ekster now supports actual Indieauth to the Microsub channels. It's now possible for example to connect with http://indiepaper.io and archive pages to a channel. But of course the possibilities are endless.",
"content": {
"text": "Ekster now supports actual Indieauth to the Microsub channels. It's now possible for example to connect with http://indiepaper.io and archive pages to a channel. But of course the possibilities are endless.",
"html": "Ekster now supports actual Indieauth to the Microsub channels. It's now possible for example to connect with indiepapier.io and archive pages to a channel. But of course the possibilities are endless."
},
"published": "2018-07-15T12:54:00+02:00",
"url": "https://p83.nl/p/795"
}
If you return a list of the items from your microsub endpoint, you could see them in the client. Now the harder part is, gathering these items from feeds and websites and converting these to JF2.
Simplified Microsub endpoint
And create a file with the following code called endpoint.php
in the web root of your website.
The code can be found here: endpoint.php
Add the following information to your <head>
tag:
<link rel="microsub" href="https://yourdomain.com/endpoint.php" />
That's all there is to it. Now you can Login with Monocle.