First publication of this article on 25 August 2025
July 2025? Among many other events in the world, this was the IETF meeting, the 123th, in Madrid. Before the meeting, there was the now traditional hackathon. I worked on the future protocol RPP (RESTful Provisioning Protocol), which may be the successor of EPP.
EPP (RFC 5730) is the current
standard for provisioning, specially domain names. When you register
a domain name, the registrar you use
probably talks to the registry with EPP. EPP
has some limits and the IETF is working (in the rpp working group)
on another protocol, RPP
(for RESTful Provisioning Protocol). Such a REST API is already
done, for
instance at Afnic (the domain name registry of
.fr
).
At the time of the IETF hackathon, RPP was far from done, there was not even a consensus on some basic aspects. So, unlike many hackathon projects, there was no attempt to test interoperability of different implementations of a protocol. The idea was instead to explore various things related to a REST provisioning protocol.
OK, so my specific work (the code is on Github):
Let's do a demo first:
% createdb registry % psql -f ./create.sql registry % ./test-server.py
Then let's get information about a domain with curl (one of the goals of a RESTful protocol like RPP is to be able to use regular HTTP clients):
% curl --header @headers.txt http://localhost:8080/domains/nic.example {"result": "Domain nic.example exists", "holder": 1, "tech_contact": 1, "admin_contact": 1, "registrar": 1, "created": "2025-08-25T14:04:18.271586", "status_code": 200, "status_message": "OK"}
And create a domain (note we have to authentify this time):
% curl --header @headers.txt --request PUT --user 2:qwerty --data '{"holder": 2, "tech": 2, "admin": 2}' http://localhost:8080/domains/durand.example {"result": "durand.example created", "status_code": 201, "status_message": "Created"}
OK, you get the idea, the README.md
file will give you some examples.
The registry is a PostgreSQL database. The server is written in Python, uses the WSGI framework, depends on several modules from the Python standard library and on psycopg2 and jsonschema. We use JSONschema for the validation of the incoming JSON (remember that RPP is far from being standardized and no schema language have been chosen yet). The test client, as you saw, is regular curl.
I added a (very small) test suite written in Zig:
% cd tests % zig build test
(I took the opportunity of the hackathon to post a sample HTTP client written in Zig to the Ziggit forum.)
The work done at the RPP table of the hackathon is presented here. All the live presentations are on YouTube and ours is at 1:19:08. Now, the rpp working group continues its work… (See the development on Github.)
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)