[rpp] Re: An implementation of JSContact in JSON Schema

Pawel Kowalik <kowalik@denic.de> Mon, 16 March 2026 08:30 UTC

Return-Path: <kowalik@denic.de>
X-Original-To: rpp@mail2.ietf.org
Delivered-To: rpp@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id CFF19CB1D293 for <rpp@mail2.ietf.org>; Mon, 16 Mar 2026 01:30:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Level:
X-Spam-Status: No, score=-2.099 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=denic.de
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fCRsy9OYkeq3 for <rpp@mail2.ietf.org>; Mon, 16 Mar 2026 01:30:00 -0700 (PDT)
Received: from mout-b-202.mailbox.org (mout-b-202.mailbox.org [195.10.208.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 1138CCB1D281 for <rpp@ietf.org>; Mon, 16 Mar 2026 01:29:59 -0700 (PDT)
Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-b-202.mailbox.org (Postfix) with ESMTPS id 4fZ7Yq1F3wzDrp1; Mon, 16 Mar 2026 09:29:51 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denic.de; s=MBO0001; t=1773649791; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=wMQ8kvl79d8XqM2HAtAD0y45zU8/0Vi7mLKq8foarFc=; b=XED0QNEWM9xgQQOAIS4oczZQKlFX93+3x+yAxTVPcr6eNCacm2wK/tJ0HQB1MVdRCyFSKQ La1OYQzEHdkFBTEIbChsD0lEiG6mjQNqAPfI/GVX5yMQvL1M+OaX6CpLA2Mm6GoT/ZWbcH HorKZnkq657HTNTlWD+7V6aW860TXqWPZXG6+TFW73NcWLUfvppIAVPdMOw8qYSCjAYRu9 48mxfB4e7KWXDeBHwFK3QvgQS7NI7P4i3O9wZwEFQgtOdofQfZJykwFOgSnAK3zJaRPdRx CNEy8MNnGCyXoWIDSBisVcx2IVnYICvwQi3FNRu1+Gx5WR7YqXpfESrSAhZ62g==
Message-ID: <479a9158-34bc-46a4-ba94-5c5971bbecf6@denic.de>
Date: Mon, 16 Mar 2026 09:29:49 +0100
MIME-Version: 1.0
From: Pawel Kowalik <kowalik@denic.de>
To: Stephane Bortzmeyer <bortzmeyer=40nic.fr@dmarc.ietf.org>, rpp@ietf.org
References: <abYT-eacTk_XBcp9@nic.fr>
Content-Language: en-GB, de-DE
In-Reply-To: <abYT-eacTk_XBcp9@nic.fr>
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg="sha-512"; boundary="------------ms090706020103020705060202"
X-MBO-RS-META: bth3ewupw16cswaxfqx9nijms9539b4g
X-MBO-RS-ID: 51abac8057463b66b6d
Message-ID-Hash: 7LNKHIKXWWG5SVB32LRDWJQ6D5J4JJFC
X-Message-ID-Hash: 7LNKHIKXWWG5SVB32LRDWJQ6D5J4JJFC
X-MailFrom: kowalik@denic.de
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [rpp] Re: An implementation of JSContact in JSON Schema
List-Id: "This list discusses a provisioning protocol based on RESTful principles and corresponding data representations using JSON." <rpp.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/rpp/WNB14csQXuGh4NWXdhV2v4trGYE>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rpp>
List-Help: <mailto:rpp-request@ietf.org?subject=help>
List-Owner: <mailto:rpp-owner@ietf.org>
List-Post: <mailto:rpp@ietf.org>
List-Subscribe: <mailto:rpp-join@ietf.org>
List-Unsubscribe: <mailto:rpp-leave@ietf.org>

Hi Stephane,

If RPP were to use JSContact it would have to define a different profile 
of it imho.

The discussion on the RDAP context shows that flexibility offered by 
JSContact in representing data (structured vs. unstructured) may be 
troublesome for provisioning system.

Your implementation for example used name components for first and last 
name, what is not fitting domain registration data model defined in EPP.

[1] 
https://mailarchive.ietf.org/arch/msg/regext/1vT_q1YnWEzxMV_552WqWoBObyk/

Kind Regards,
Pawel

On 15.03.26 03:05, Stephane Bortzmeyer wrote:
> Hello from Shenzhen,
>
> Playing with RPP during the hackathon, I searched resources about
> JSContact (RFC 9553) since I think it would be hard to explain that
> RPP use a different model for contacts/entities than RDAP (see
> draft-ietf-regext-rdap-jscontact and draft-ietf-rpp-requirements-03,
> section 18.4.3).
>
> Also, I think that a provisioning protocol needs to validate the
> requests, otherwise, there is a risk that the registry does not really
> register what the client wanted. There are many schema languages for
> JSON but I focused on JSON Schema.
>
> Someone was nice enough to produce a JSON Schema for JSContact (RFC
> 9553 does not contain a formal description)
> <https://github.com/federicotdn/jscontact-json-schema>. It is not
> perfect (JSContact Ids are too lax) but it's still very useful.
>
> I tested it with a small demo RPP implementation
> <https://github.com/bortzmeyer/RPP-Afnic>, using this JSON Schema
> validator <https://github.com/python-jsonschema/jsonschema> and it seems to work.
>
> See
> <https://github.com/bortzmeyer/RPP-Afnic/blob/main/contact-creation.json>
> for an example of what the RPP client would have to send to create a
> contact. Obviously, a real registry would have a profile of JSContact
> (publically documented, I hope), making more fields mandatory.
>
>
>
>
> _______________________________________________
> rpp mailing list -- rpp@ietf.org
> To unsubscribe send an email to rpp-leave@ietf.org