Specs, Spec Testers, and Spec Writers - sgml/signature GitHub Wiki
Authors
- https://ericlawrence.com/eric/
- https://homepages.cwi.nl/~steven/
- https://dbaron.org
- https://florian.rivoal.net
- https://gist.github.com/webinista/
- https://www.broken-links.com/2007/05/15/a-call-for-clarity-in-standards-specifications/
- https://www.w3.org/blog/2007/03/orthogonal-specifications-is-good/
- https://www.w3.org/People/howcome/
- https://www.w3.org/People/Bos/
How-to
APIs
specifications:
- name: "AsyncAPI Specification"
overview: >
Begun as community‑driven npm implementations for asynchronous,
event‑driven APIs, the AsyncAPI Specification formalizes a standardized
way to document and build such APIs.
governance: >
Managed by the AsyncAPI Initiative, it emphasizes an open,
community‑driven process without originating from one single organization.
url: "https://www.asyncapi.com/"
- name: "OpenAPI Specification (formerly Swagger)"
overview: >
Initially implemented via npm‑based tools as the Swagger specification,
it evolved into the OpenAPI Specification—a formal definition for RESTful APIs
that streamlines development and integration.
governance: >
Now maintained under the OpenAPI Initiative (sponsored by the Linux Foundation),
it remains a community‑driven standard rather than a proprietary solution by a single organization.
url: "https://www.openapis.org/"
- name: "JSON:API"
overview: >
Emerging from practical npm‑based implementations, JSON:API provides a formal specification
for building APIs in JSON, standardizing the way clients and servers communicate,
and reducing boilerplate.
governance: >
It is maintained by a collaborative community committed to open standards.
url: "https://jsonapi.org/"
- name: "OpenRPC Specification"
overview: >
Arising from npm module implementations showcasing consistent approaches to JSON‑RPC,
the OpenRPC Specification formalizes a standard for describing JSON‑RPC APIs,
enabling better tooling like automatic documentation and code generation.
governance: >
Governed by the OpenRPC Initiative, it is a vendor‑neutral, community‑driven specification.
url: "https://open-rpc.org/"
- name: "Hydra Core Vocabulary"
overview: >
Originating through community experiments and npm‑based implementations focused on
hypermedia‑driven API design in JSON‑LD, the Hydra Core Vocabulary offers formalized
conventions for building interoperable hypermedia APIs.
governance: >
It is maintained through community consensus in a vendor‑neutral context,
facilitating standardized hypermedia practices.
url: "https://www.hydra-cg.com/"
xml_equivalents:
- name: "AsyncAPI Specification"
xml_equivalent: "WSDL 2.0 (for asynchronous SOAP operations)"
notes: >
AsyncAPI is focused on asynchronous, event‑driven APIs. While there is no direct XML format
designed exclusively for asynchronous messaging in the XML world, WSDL 2.0 can describe asynchronous
operations in SOAP-based services, making it the nearest analog.
url: "https://www.w3.org/TR/wsdl20/"
- name: "OpenAPI Specification"
xml_equivalent: "WSDL"
notes: >
OpenAPI standardizes RESTful APIs (typically using JSON/YAML), whereas WSDL is the traditional XML‑based
standard for describing SOAP web services. WSDL provides a formal XML contract for synchronous operations.
url: "https://www.w3.org/TR/wsdl/"
- name: "JSON:API"
xml_equivalent: "OData (with AtomPub)"
notes: >
JSON:API formalizes a JSON-based approach for building APIs. In the XML realm, OData—with its support for
AtomPub (an XML-based syndication format)—serves a similar role by defining data access and operations in a standard way.
Although the approaches differ, they both aim to reduce boilerplate and standardize API interactions.
url: "https://www.odata.org/"
- name: "OpenRPC Specification"
xml_equivalent: "XML-RPC"
notes: >
OpenRPC defines a standard for JSON‑RPC APIs, while XML‑RPC is its XML counterpart, specifying how remote procedure
calls should be encoded in XML and transmitted over HTTP.
url: "http://xmlrpc.scripting.com/spec.html"
- name: "Hydra Core Vocabulary"
xml_equivalent: "AtomPub / Collection+XML"
notes: >
Hydra provides a vocabulary for hypermedia‑driven REST APIs using JSON‑LD. In the XML ecosystem, similar hypermedia concepts
have been implemented via protocols such as Atom Publishing Protocol (AtomPub) and Collection+XML for managing collections
and representing hypermedia controls.
url: "https://www.ietf.org/rfc/rfc5023.txt"
css_equivalents:
- name: "CSS Houdini"
overview: >
A set of low-level APIs that allow developers to extend the CSS engine,
enabling custom styling and layout capabilities that were once only possible
through experimental code.
notes: >
Like community-driven API specs, Houdini emerged from developer needs to
break free from the limitations of the core CSS language and is now being
standardized with contributions from multiple vendors.
url: "https://houdini.spec.whatwg.org/"
- name: "CSS Grid Layout"
overview: >
A powerful layout system that lets developers create complex, responsive
grid-based designs that adapt to different screen sizes.
notes: >
Originally developed via community experimentation and browser vendor
prototypes, CSS Grid Layout is now a formal specification maintained
by the W3C, paralleling the evolution from practical innovation to standardized spec.
url: "https://www.w3.org/TR/css-grid-1/"
- name: "CSS Flexbox"
overview: >
A one-dimensional layout method that provides an efficient way to align and
distribute space among items in a container.
notes: >
Tested extensively by developers and incorporated into browser engines,
Flexbox evolved from practice into a formal standard through community
feedback and collaborative standardization.
url: "https://www.w3.org/TR/css-flexbox-1/"
- name: "CSS Custom Properties"
overview: >
Also known as CSS variables, these enable the reuse of values throughout
stylesheet(s), supporting dynamic theming and more maintainable code.
notes: >
What began as an experimental feature widely adopted by developers
was eventually standardized, reflecting the broader process of community-driven
innovation leading to formal specification.
url: "https://www.w3.org/TR/css-variables-1/"
Taxonomy / SDLC Modeling
- https://www.w3.org/TR/wai-aria/img/rdf_model
- https://www.w3.org/TR/xhtml-rdfa/
- https://www.w3.org/TR/rdf-json/
- https://www.ietf.org/slides/slides-edu-document-lifecycle-02.pdf
Requirements / User Stories
- https://www.w3.org/Protocols/rfc1341/1_Introduction.html
- https://datatracker.ietf.org/doc/rfc1812/?include_text=1
- https://datatracker.ietf.org/doc/rfc7084/?include_text=1
- https://datatracker.ietf.org/doc/html/rfc7628
- https://www.w3.org/TR/2007/NOTE-xquery-requirements-20070323/
- https://www.w3.org/TR/xpath-full-text-10-requirements/
- https://www.w3.org/TR/xquery-31-requirements/
- https://www.w3.org/WAI/GL/low-vision-a11y-tf/wiki/User_stories_-_use_cases
- https://www.w3.org/TR/2018/NOTE-web-payments-use-cases-20180719/
- https://www.w3.org/TR/pwp-ucr/
- http://microformats.org/wiki/process
- https://indieweb.org/Micropub
- https://indieweb.org/Webmention
- https://indieweb.org/WebSub
- https://indieweb.org/webhook
- https://www.standardwebhooks.com/
Architecture Diagrams
- https://www.oreilly.com/library/view/exist/9781449337094/ch04.html
- https://www.ietf.org/rfc/rfc6749.txt
- https://webdav.io/webdav/
- https://www.ietf.org/rfc/rfc6250.txt
Consultants
- https://www.quirksmode.org/donations.html
- http://www.cssplay.co.uk/ads_page.html
- http://www.megginson.com/consulting/
Organizations
- https://developer.mozilla.org/en-US/docs/Archive/Web_Standards/Choosing_Standards_Compliance_Over_Proprietary_Practices
- https://enterprisearchitecture.dk/links/files/FEA-RM_TRMv1.pdf
- https://www.colleaga.org/sites/default/files/attachments/Standards-Catalogue-v1_0%281%29%5B1%5D.pdf
- http://mementoweb.org/depot/native/archiveis/
Naming Conventions
- https://en.wikipedia.org/wiki/List_of_computing_and_IT_abbreviations
- https://tools.ietf.org/html/draft-wilde-registries-01
- https://aspe.hhs.gov/report/inventory-health-care-information-standards
- https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfStandards/results.cfm?start_search=1&productcode=&category=&type=&title=&organization=&referencenumber=®ulationnumber=&recognitionnumber=&effectivedatefrom=&effectivedateto=&pagenum=50&sortcolumn=ind
- https://www.w3.org/TR/personalization-semantics-1.0/
Widgets
Bloggers
- CFML - https://www.bennadel.com/
- PHP - https://tonymarston.net/php-mysql/index.php
- Python - https://web.archive.org/web/00000000000000*/ivazquez.net
- Perl - http://damian.conway.org/Resources/
- Ruby - http://intertwingly.net/blog/
- Golang - https://www.jerf.org/iri/categories/golang/
- Elixir - https://brainlid.org/
- Java - https://www.loicmathieu.fr/wordpress/en/
- C# - https://codeblog.jonskeet.uk/category/csharp/
Log Formats
Standard Libraries
- CoreJS: https://github.com/zloirock/core-js
- XSLTSL: http://xsltsl.sourceforge.net/
- ClassNames: http://jedwatson.github.io/classnames/
- XHTML2: https://www.w3.org/TR/xhtml2/
- XSLFO: https://www.npmjs.com/package/jsx-xsl-fo
Standard Specifications
- Reporting: https://ecqi.healthit.gov/qrda
- Tokens: http://unicode.org/reports/tr23/
- Debian List Files: https://repolib.readthedocs.io/en/latest/deb822-format.html
- Certificate Status: https://www.ietf.org/rfc/rfc2560.txt
- Data URIs: https://datatracker.ietf.org/doc/html/rfc2397
- URI Generic Syntax: https://datatracker.ietf.org/doc/html/rfc3986
- DNS Ext: https://www.rfc-editor.org/rfc/rfc6891.txt
- URI Templates: https://datatracker.ietf.org/doc/html/rfc6570
- Temporal URIs: https://www.w3.org/2007/08/video/positions/temporalURI.pdf
- SMS: https://www.rfc-editor.org/rfc/rfc5724
- Fragments: https://issues.chromium.org/issues/40542495
- Multipart Forms: https://www.ietf.org/rfc/rfc7578.txt
- Pervasive Monitoring: https://www.rfc-editor.org/rfc/rfc7258
- CSS: https://www.w3.org/Style/CSS/Disclosures.en.html
- text/css: https://www.rfc-editor.org/rfc/rfc2318.html
- HTTP 1.1 Status Codes: http://webconcepts.info/concepts/http-status-code/
- HTTP Request Methods: http://webconcepts.info/concepts/http-method/
- WEBDAV Sync: https://datatracker.ietf.org/doc/html/rfc6578
- JCR to WEBDAV: https://www.rfc-editor.org/rfc/rfc5829
- HTTP APIs: https://www.rfc-editor.org/info/rfc9457
- Grants and Authorization: https://www.rfc-editor.org/rfc/rfc9635
- Protocols: https://www.rfc-editor.org/info/rfc9205
- URIs: https://www.rfc-editor.org/info/rfc8820
- Terminology: https://www.rfc-editor.org/info/rfc8499
- Services: https://tools.ietf.org/html/rfc8631
- Mutual TLS: https://datatracker.ietf.org/doc/html/rfc8120
- JSON: https://www.loc.gov/preservation/digital/formats/fdd/fdd000381.shtml
- JWT: https://www.rfc-editor.org/info/rfc8725
- iGov: https://openid.net/specs/openid-igov-openid-connect-1_0.html
- TCP/IP: https://www.w3.org/People/Frystyk/thesis/TcpIp.html
- OAuth 2: https://www.rfc-editor.org/info/rfc8252
- UDP: https://tools.ietf.org/html/rfc8085
- IoT: https://tools.ietf.org/html/rfc8352
- DNS: https://tools.ietf.org/html/rfc8324
- link: https://tools.ietf.org/html/rfc8288
- JSON: https://tools.ietf.org/html/rfc8259
- JSON Type Definition(JTD): https://www.rfc-editor.org/rfc/rfc8927
- preflight: https://greenbytes.de/tech/webdav/rfc8297.html
- CDN: https://greenbytes.de/tech/webdav/rfc8586.html
- Websocket Tunnel: https://greenbytes.de/tech/webdav/rfc8441.html
- Websocket Bindings: https://www.iana.org/assignments/websocket/websocket.txt
- OAuth: https://tools.ietf.org/html/rfc8252
- CBOR: https://tools.ietf.org/html/rfc8152
- GeoJSON: https://tools.ietf.org/html/rfc8142
- ASCII Art: https://tools.ietf.org/html/rfc8140
- PDF: https://tools.ietf.org/html/rfc8118
- json-canon: https://www.rfc-editor.org/rfc/rfc8785
- json-seq: https://tools.ietf.org/html/rfc7464
- IPV6: https://tools.ietf.org/html/rfc7404
- Font Types: https://tools.ietf.org/html/rfc8081
Patterns
- Conditional GET: https://tools.ietf.org/html/rfc7232
- Media Types: https://www.rfc-editor.org/rfc/rfc6129.html
- Discovery: https://tools.ietf.org/html/rfc6415
- Identity: https://openid.net/specs/openid-connect-scim-profile-1_0.html
- Cross-Domain: https://tools.ietf.org/html/rfc7642
- SAML: https://infosec.mozilla.org/guidelines/iam/saml.html
- Link Relations: http://microformats.org/wiki/existing-rel-values
- HTML Headers: https://gethead.info/
- Documentation: https://perldoc.perl.org/perlpodspec.html
- REST: http://events17.linuxfoundation.org/sites/events/files/slides/RestJSON_updated.pdf
- Security Hardening: https://pages.nist.gov/800-63-3/sp800-63b.html
Adoption Rates
- CMI5 vs xAPI
- https://w3techs.com/technologies/details/ce-http2/all/all
- http://6lab.cisco.com/stats/
- https://developer.chrome.com/extensions/api_other
- https://developer.mozilla.org/en-US/docs/WebAPI
- https://node.green/nightly.html
Metadata Specifications
Standard | Most Recent Specification Update | Total Sections in Table of Contents | GitHub Stars | Wikidata URL |
---|---|---|---|---|
Schema.org | November 22, 2024 | 12 sections | 5.5k stars | Schema.org |
Microformats | May 2010 | 8 sections | 191 stars | Microformats |
XBRL | January 14, 2025 | 14 sections | 85 stars | XBRL |
OPML | December 7, 2022 | 10 sections | 3 stars | OPML |
application/opensearchdescription+xml | January 7, 2021 | 6 sections | 2 stars | OpenSearch |
XMPP | January 2025 | 14 sections | 687 stars | XMPP |
XForms | January 2025 | 25 sections | 87 stars | XForms |
GRDDL | September 11, 2007 | 10 sections | Not available | GRDDL |
Redundancy in Query Strings and the POST body
Advantage | Explanation |
---|---|
Increased Visibility in Logs & Monitoring | Query parameters are logged by web servers, making request patterns easily traceable without inspecting the request body. |
Easier Manual Testing with Browsers & Tools | Allows modifying URL parameters manually for quick debugging with a browser or Postman, without altering the request payload structure. |
Redundancy for Fallback Handling | Some frameworks prioritize query parameters if body parsing fails, ensuring data is accessible even in broken request flows. |
Simplifies Mocking & Debugging with Logs | Debugging proxy tools (e.g., Fiddler, Charles) can inspect query parameters even if the body is encrypted or compressed. |
API Flexibility Across Systems | Some APIs accept parameters both in the query string and body for easier client-side troubleshooting. |
Potential Downsides | Can cause confusion if query and body values conflict, expose sensitive data via query strings, and introduce unnecessary redundancy. |
Strategy & Relevant RFCs
This approach leverages both URL query parameters and POST request bodies to improve debugging and flexibility. While query parameters provide visibility in server logs and quick troubleshooting options, the request body allows structured data handling.
Key specifications influencing this strategy:
- RFC 7231 (HTTP/1.1 Semantics and Content) – Defines the behavior of HTTP POST and GET requests.
- RFC 3986 (URI Generic Syntax) – Governs query strings in URLs.
- RFC 7578 (Multipart Form Data Handling) – Important when mixing query parameters with form data in POST requests.
- RFC 9110 (HTTP Semantics Updates) – Addresses modern HTTP usage, refining older RFCs.
By considering these standards, APIs and applications can ensure consistent behavior while maintaining flexibility for debugging purposes.
References
- https://www.w3.org/TR/fetch-metadata/
- https://www.w3.org/TR/runtime/
- https://www.w3.org/2019/Process-20190301/
- https://www.w3.org/TR/css-variables-1/
- https://www.w3.org/TR/css-flexbox-1/
- https://www.w3.org/TR/css-backgrounds-3/
- https://www.w3.org/TR/mediaqueries-4/
- https://www.w3.org/TR/css-contain-1/
- https://www.w3.org/TR/rdfa-lite/
- https://www.w3.org/TR/xslt-10/
- https://www.w3.org/TR/xpath-10/
- https://www.w3.org/TR/xmlschema11-1/
- https://w3c.github.io/webappsec-secure-contexts/
- https://wiki.whatwg.org/wiki/MetaExtensions
- https://www.bahrain.bh/wps/wcm/connect/0f54aba2-5425-43d7-9f4b-1eda17c50a21/Standards+for+e-Content+Development.pdf?MOD=AJPERES
- https://tools.ietf.org/rfc/rfc5000.txt
- https://www.ietf.org/rfc/rfc6585.txt
- https://tools.ietf.org/html/rfc7231
- https://tools.ietf.org/html/rfc7903
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation
- https://trends.builtwith.com/docinfo/Purl
- https://caniuse.com/#feat=css-containment
- https://caniuse.com/#feat=css-read-only-write
- https://caniuse.com/#feat=css-reflections
- https://caniuse.com/#feat=css-paint-api
- https://caniuse.com/#feat=css-variables
- https://caniuse.com/#feat=download
- https://caniuse.com/#feat=mediacapture-fromelement
- https://caniuse.com/#feat=subresource-integrity
- https://medium.com/@saurabhpati.pati/javascripts-journey-with-ecma-es-2017-2ad36a7f9538
- https://www.innoarchitech.com/javascript-ecma262-tc39-ecmascript-transpilers-explained/
- http://pointedears.de/scripts/test/es-matrix/
- https://mvnrepository.com/open-source/java-specs
- https://dret.typepad.com/dretblog/2017/10/how-api-languages-evolve.html
- https://developers.google.com/web/updates/2018/03/cssom
- https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html
- https://wiki.creativecommons.org/wiki/CC_OpenSearch
- http://www.chromium.org/tab-to-search
- https://www.chenhuijing.com/blog/css-grid-flexbox-combo/
- https://www.linusakesson.net/programming/tty/
- http://codingfreak.blogspot.com/2012/03/daemon-izing-process-in-linux.html
- https://www.win.tue.nl/~aeb/linux/lk/lk-10.html
- http://man.openbsd.org/tr
- http://man.cat-v.org/unix_8th/1/tr