{
    "href": "/post/2025/03/10/uri-interop-now-open-for-public-review/",
    "relId": "2025/03/10/uri-interop-now-open-for-public-review",
    "title": "Uri-Interop Now Open For Public Review",
    "author": "pmjones",
    "tags": [
        {
            "href": "/tag/programming/",
            "relId": "programming",
            "title": "Programming",
            "author": null,
            "created": null,
            "updated": [],
            "markup": "markdown"
        },
        {
            "href": "/tag/php/",
            "relId": "php",
            "title": "PHP",
            "author": null,
            "created": null,
            "updated": [],
            "markup": "markdown"
        },
        {
            "href": "/tag/interop/",
            "relId": "interop",
            "title": "Interop",
            "author": null,
            "created": "2025-02-03 20:11:59 UTC",
            "updated": [
                "2025-02-03 20:11:59 UTC"
            ],
            "markup": "markdown"
        }
    ],
    "created": "2025-03-11 01:31:32 UTC",
    "updated": [
        "2025-03-11 01:31:32 UTC",
        "2025-03-17 13:13:56 UTC",
        "2025-03-17 13:14:32 UTC",
        "2025-03-17 13:15:21 UTC",
        "2025-03-17 13:15:50 UTC",
        "2025-03-17 13:16:53 UTC",
        "2025-03-17 13:17:56 UTC",
        "2025-03-17 13:18:24 UTC",
        "2025-03-17 13:18:38 UTC",
        "2025-03-17 13:18:50 UTC"
    ],
    "markup": "markdown",
    "html": "<p>After a period of private review, the <a href=\"https://github.com/uri-interop/interface\">uri-interop/interface</a> package is now open for public review.</p>\n<p>Uri-Interop publishes a standard set of interoperable URI interfaces for PHP 8.4+. It reflects, refines, and reconciles the common practices identified within <a href=\"https://github.com/uri-interop/interface/blob/1.x/README-RESEARCH.md\">several pre-existing projects</a>.</p>\n<p>The package defines separate interfaces to afford reading and modifying URI component values:</p>\n<ul>\n<li>\n<del><em>Uri</em></del> <a href=\"https://github.com/uri-interop/interface#stringablecomponents\"><em>StringableComponents</em></a> affords reading of the URI component values and recomposing them into a string.</li>\n<li>\n<del><em>MutableUri</em></del> <a href=\"https://github.com/uri-interop/interface#mutablecomponents\"><em>MutableComponents</em></a> extends <del><em>Uri</em></del> <em>StringableComponents</em> to afford direct modification of component values.</li>\n<li>\n<del><em>ImmutableUri</em></del> <a href=\"https://github.com/uri-interop/interface#immutablecomponents\"><em>ImmutableComponents</em></a> extends <del><em>Uri</em></del> <em>StringableComponents</em> to afford immutable modification of component values.</li>\n</ul>\n<p>Uri-Interop defines factory and parser interfaces:</p>\n<ul>\n<li>\n<del><em>UriFactory</em></del> <a href=\"https://github.com/uri-interop/interface#uriencodedfactory\"><em>UriEncodedFactory</em></a> affords creating a new URI instance from URI component values.</li>\n<li>\n<del><em>UriParser</em></del> <a href=\"https://github.com/uri-interop/interface#uriencodedparser\"><em>UriEncodedParser</em></a> affords creating a new URI instance from a URI string.</li>\n</ul>\n<p>Uri-Interop defines these marker interfaces to codify expectations around RFC compliance:</p>\n<ul>\n<li>\n<del><em>Rfc3986Compliant</em></del> <a href=\"https://github.com/uri-interop/interface#uriencoded\"><em>UriEncoded</em></a> marks any of the other interfaces to indicate <a href=\"https://datatracker.ietf.org/doc/html/rfc3986/\">RFC 3986</a> compliance.</li>\n<li>\n<del><em>Rfc3987Compliant</em></del> <a href=\"https://github.com/uri-interop/interface#iriencoded\"><em>IriEncoded</em></a> marks any of the other interfaces to indicate <a href=\"https://datatracker.ietf.org/doc/html/rfc3987/\">RFC 3987</a> compliance.</li>\n</ul>\n<p>Finally, Uri-Interop defines an interface of PHPStan type aliases, <a href=\"https://github.com/uri-interop/interface#uritypealiases\"><em>UriTypeAliases</em></a>, to aid static analysis.</p>\n<p>If you use URI objects (who doesn't!) and are interested an interoperable set of interfaces, please offer your comments and criticism as <a href=\"https://github.com/uri-interop/interface/issues\">issues</a> or <a href=\"https://github.com/uri-interop/interface/pulls\">pull requests</a> out at Github.</p>\n<hr>\n<p><strong>UPDATE (Mon 17 Mar 2025):</strong> Based on review, some of the interface names have changed since the initial announcement, though their purpose remains the same.</p>\n"
}
