From 0ab833a453bbacfe87b5f82528d471918c90a85d Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Mon, 17 Jul 2023 11:05:41 +0100 Subject: [PATCH 01/11] Add Postman case study --- pages/posts/postman-case-study.md | 56 ++++++++++++++++++ .../posts/2023/postman-case-study/cover.webp | Bin 0 -> 25368 bytes 2 files changed, 56 insertions(+) create mode 100644 pages/posts/postman-case-study.md create mode 100644 public/img/posts/2023/postman-case-study/cover.webp diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md new file mode 100644 index 00000000..328fbc11 --- /dev/null +++ b/pages/posts/postman-case-study.md @@ -0,0 +1,56 @@ +--- +title: "How Postman uses JSON Schema" +date: 2023-07-17T06:00:00+00:00 +type: Case Study +cover: /img/posts/2023/postman-case-study/cover.webp +authors: + - name: Juan Cruz Viotti + photo: /img/avatars/jviotti.webp + link: https://twitter.com/jviottidc +excerpt: "Learn how JSON Schema continues to be a crucial component of the Postman API Platform and the API ecosystem." +canonicalLink: https://blog.postman.com/how-postman-uses-json-schema/ +--- + +The [Postman API Platform](https://blog.postman.com/announcing-postman-v10/) offers a rich set of solutions for every step of the [API lifecycle](https://www.postman.com/api-platform/api-lifecycle/). Through the years, we have witnessed from the front row how JSON Schema entered the scene to become the industry standard for describing and annotating JSON documents. While many alternatives came and went, JSON Schema unquestionably proved to be the robust and extensible foundation behind the API specification movement. According to our [2022 State of the API Report](https://www.postman.com/state-of-api/api-technologies/#api-technologies), an impressive 72% of respondents chose JSON Schema as their preferred API specification. + +With JSON Schema being so ingrained in how APIs are developed today, it is hard to find a place in the Postman organization or the Postman API Platform where JSON Schema is not involved in some way or another. And with the modern (and increasing) importance of [API-first](https://www.postman.com/use-cases/api-first-development/) development, the use of API specifications plays a critical role in designing and sharing APIs. JSON Schema is currently the backbone of the most popular API specification technologies in the world, including [OpenAPI](https://www.openapis.org/), [AsyncAPI](https://www.asyncapi.com/), and [RAML](https://raml.org/). + +## JSON Schema in the Postman organization + +### How Postman uses JSON Schema to build its own APIs + +Postman operates a complex distributed system consisting of many dozens of microservices powering the cloud tools that make the Postman API Platform. These microservices make use of JSON Schema to model their interfaces through standalone JSON Schema definitions or OpenAPI and AsyncAPI specifications. Many of these microservices also use JSON Schema under the hood to validate internal data structures and configuration files, and to perform end-to-end testing by either asserting on expected responses or auto-generating input data from JSON Schema definitions. Being a Node.js company, we have started efforts to analyze how we can rely on TypeScript annotations to automatically generate OpenAPI and AsyncAPI definitions from our codebases. + +Given the importance of API specifications for managing our distributed systems, in 2021 we conducted a comprehensive internal research project to understand the diverse set of JSON Schema definitions introduced by our set of microservices. The corresponding JSON Schema definitions were analyzed based on characteristics such as reusability, degree of similarity, uniqueness ratio, and type of content. To promote reusability and discoverability, Postman is exploring the idea of a new microservice that acts as a central JSON Schema catalog API. + +For analysis purposes, we periodically extract data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, we automatically convert SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into our internal data warehouse. We have conducted some initial experiments on generating SQL table definitions out of JSON Schema documents to make the latter the source of truth. + +### Use cases of JSON Schema beyond APIs + +The use of JSON Schema within the Postman organization is not restricted to our backend services. For example, the popular [Postman Collection](https://www.postman.com/collection/) JSON-based data format is formally defined using JSON Schema. Postman's [Newman](https://learning.postman.com/docs/collections/using-newman-cli/command-line-integration-with-newman/) command-line Collection Runner makes use of JSON Schema to validate the expected output of custom reporters. Postman's in-house cross-platform desktop framework makes use of JSON Schema to validate and annotate profile definitions that declare the various variants of the desktop application (Stable, Canary, etc). Postman also maintains internal [C4](https://c4model.com/) diagrams of the Postman architecture defined using JSON and validated using JSON Schema. + +In early 2022, Postman released support for [gRPC and Protocol Buffers](https://blog.postman.com/postman-now-supports-grpc/). Internally, Postman is able to transform Protocol Buffers schema definitions into JSON Schema definitions and back again. The JSON Schema definitions corresponding to the Protocol Buffers schemas are used to provide type-hinting and auto-completion in the gRPC payload composer editor, to validate user input and to generate random data that matches a Protocol Buffers schema for testing purposes. This approach allows us to implement the aforementioned features on top of a single unified schema language: JSON Schema. + +## JSON Schema in the Postman API Platform + +JSON Schema is not only used internally to develop the various components of the Postman API Platform---many of the features offered by Postman directly involve the use of JSON Schema. + +### **JSON Schema in the context of Postman Collections** + +The Postman app can be used to [convert a growing number of API specification formats into Postman Collections](https://learning.postman.com/docs/developer/collection-conversion/). As noted earlier in this post, the most popular API specification formats such as OpenAPI, Swagger, and RAML rely on JSON Schema. In many cases, the API specification conversion logic requires generating random JSON documents that match a JSON Schema definition. + +When defining a Postman Collection, users may define JavaScript-based test and pre-request scripts that are executed automatically when running the corresponding collection. The JavaScript engine embedded within Postman to run these scripts integrates with the popular [AJV](https://ajv.js.org/) JSON Schema validator. With it, Postman users write scripts that employ JSON Schema validation using a wide range of JSON Schema specification versions. + +### **JSON Schema in the context of OpenAPI** + +The Postman app provides a rich [OpenAPI editor](https://learning.postman.com/docs/designing-and-developing-your-api/defining-an-api/) with advanced JSON Schema capabilities. The editor is able to show autocompletion and syntax warnings, and it also highlights [potential areas of improvements](https://learning.postman.com/docs/api-governance/api-definition/api-definition-warnings/) with regards to readability and security for JSON Schema and OpenAPI endpoint definitions. An OpenAPI definition is then used to generate [rich documentation](https://learning.postman.com/docs/publishing-your-api/documenting-your-api/) of the available endpoints and their respective JSON Schema definitions, and to optionally generate matching [server code](https://learning.postman.com/docs/designing-and-developing-your-api/generating-server-code/) written in Go, Java, Python, and Node.js. + +An API defined using Postman is more than its API definition. It has surrounding elements such as documentation, tests, mock servers, and monitors. When writing an OpenAPI specification, Postman will [cross-check the integrity of each of these elements](https://learning.postman.com/docs/designing-and-developing-your-api/validating-elements-against-schema/) against the JSON Schema definitions included in the API specification. + +### **The Postman API Network** + +A key component of the Postman API Platform is the [Postman API Network](https://www.postman.com/api-network/), the [world's largest registry of public APIs](https://blog.postman.com/postman-public-api-network-is-now-the-worlds-largest-public-api-hub/). This global public registry includes a vast amount of APIs and their corresponding JSON Schema definitions typically maintained by their respective original authors. Some notable examples are the [Slack Web API](https://www.postman.com/slackhq/workspace/slack-api/collection/13509546-993e3b18-d277-4189-8ce5-af45df38e336), the [Docker HUB API](https://www.postman.com/dockerdev/workspace/docker-hub/collection/17990590-9574e087-2a50-4ecf-88b3-55f12a29d99e), and the [Twilio API](https://www.postman.com/twilio/workspace/twilio-api/overview). The Postman API Network is therefore one of the largest datasets of production-grade JSON Schema definitions. + +## Postman and JSON Schema + +With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, we are honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors---[Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), Greg Dennis, Jason Desrosiers, and Julian Berman---as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file diff --git a/public/img/posts/2023/postman-case-study/cover.webp b/public/img/posts/2023/postman-case-study/cover.webp new file mode 100644 index 0000000000000000000000000000000000000000..bcbd5d5f7365cee700b6d34be289775f80cba28d GIT binary patch literal 25368 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 z zUdK%?DBE}|2E#~4tx`5$;Ks5$|GH;4$=289QB`33YGuQI4yr2?ld4le-RVw8KY1VD zWTKvWv6Di|_3XTXyTaWf9SP(5J9Qlmmut$Xz?3llO##8{d78T@H`J%uEqf5|vEdWR zC`yvFPMVB*$P|NCvQ8mx$}5W~!vFVC-y1ILxiq0ZxP{vPi#o;Y83ExWSXbQ< z%sn<)@%aaRNWROxEXRxr#*|npyB4h9zgjoh8WH3XxM0`;fbPrvx6}4KaU0L)M>oW~ zP-2Y0g4JGy?^Uvj-2A-IKE|#n9D(ztAYY~75n;p2N%A(ml3D&I>Ugm_;u?yKx7 zjB2A6g~24>ub8)Xe1llT+t02s=JWyC@nVO&1;WE~dG#nuV13x+(hNP*6ff`1X2wi9Xn%DNehs?*t(>v71@#BNh zHD319`JV@YHM~IiDJ^e@qA=?FsgEJ9Hzw`75uVm6&Au<;*HIraobtCUvt?H+&q0u)4$1@9QXCsaiV*<^Afd4K8<8VUN{4($yR@}cTcvgRwoA2q}QH)2V zC9b2oTl2ig`_{%LY@P(0`cRu2*p#eerO^h|0ASF(wooP1c@w<2rzIK6H`lt(J_>gqA@;F zf|>SV??=%XJ#Su3_~noZt`|}qgZ7hrlnuNs*Ru=2D@nK+!`)?Z6X^PN46VHmoYf%! z2`O-|WF$B%;5Q6t!J`bJ<7cfZA$Csk0WY5D45U#1wOv)iTUJF9l_84fXb#SE^GE*3 zQcEU+d7Tl_@H#}!R?@#lHTzyHF-`p_MSC5x5lHXIWlHxb$~m+@G_JZ2{^H{Iy_w*a zlPF|p2_GeAeCogQ4D9boK2vj(VfZ}P$Lp^zQ(X5KheJ z5hjg)PL^D!zdBYL6OM~~j`GbDB6p1bckFiiUX1#uXQ-LM&{)|W{VXYnfU%fMA1m>N zSBA8KuxhZC4;8Iq6P-|Di*1wnp@dlu<3F4L^9}uv2iHDuQ(UZ<2-M^Qu|xc`s2o#1 zjRY;NpmtX<3=GCzA?oHZL6{ZQo)4dKLVXXo#LoQsmlPpOT|H^}RF6~Nfgh(Vi~T69 z8?6UG6|IDL$IuW42EKHg{3sC;#WHrudaK}pou|_;zcBD(eRe!{C*)>77b5MwTjddFFjy6jlhkAcmEw0c8tU`vd6i|9l)DyfP zVN)>!ck2tY$fM2!s-lY|ZSy7zFmOR8C0!;MY4KSaNgc0wsx)=9Gz@1?-< lP5;h@QlMkCVO3eZ5-l{LrT~L)_n5SE`M>RF|F-}4{13hRWs(2@ literal 0 HcmV?d00001 From 0781fd1f56d2a4974989af1268a4e0a05ebc9685 Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Mon, 17 Jul 2023 11:09:13 +0100 Subject: [PATCH 02/11] Add message about original publication location --- pages/posts/postman-case-study.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index 328fbc11..7d885ff3 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -11,6 +11,8 @@ excerpt: "Learn how JSON Schema continues to be a crucial component of the Postm canonicalLink: https://blog.postman.com/how-postman-uses-json-schema/ --- +> Originally published at [blog.postman.com](https://blog.postman.com/how-postman-uses-json-schema). + The [Postman API Platform](https://blog.postman.com/announcing-postman-v10/) offers a rich set of solutions for every step of the [API lifecycle](https://www.postman.com/api-platform/api-lifecycle/). Through the years, we have witnessed from the front row how JSON Schema entered the scene to become the industry standard for describing and annotating JSON documents. While many alternatives came and went, JSON Schema unquestionably proved to be the robust and extensible foundation behind the API specification movement. According to our [2022 State of the API Report](https://www.postman.com/state-of-api/api-technologies/#api-technologies), an impressive 72% of respondents chose JSON Schema as their preferred API specification. With JSON Schema being so ingrained in how APIs are developed today, it is hard to find a place in the Postman organization or the Postman API Platform where JSON Schema is not involved in some way or another. And with the modern (and increasing) importance of [API-first](https://www.postman.com/use-cases/api-first-development/) development, the use of API specifications plays a critical role in designing and sharing APIs. JSON Schema is currently the backbone of the most popular API specification technologies in the world, including [OpenAPI](https://www.openapis.org/), [AsyncAPI](https://www.asyncapi.com/), and [RAML](https://raml.org/). From 5a2f6e3f7d63bacf5b79f5985a6d686692aaf66a Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Mon, 17 Jul 2023 11:11:36 +0100 Subject: [PATCH 03/11] Fix dashes and ems for rendering --- pages/posts/postman-case-study.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index 7d885ff3..309a00d8 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -35,7 +35,7 @@ In early 2022, Postman released support for [gRPC and Protocol Buffers](https:// ## JSON Schema in the Postman API Platform -JSON Schema is not only used internally to develop the various components of the Postman API Platform---many of the features offered by Postman directly involve the use of JSON Schema. +JSON Schema is not only used internally to develop the various components of the Postman API Platform - many of the features offered by Postman directly involve the use of JSON Schema. ### **JSON Schema in the context of Postman Collections** @@ -55,4 +55,4 @@ A key component of the Postman API Platform is the [Postman API Network](https:/ ## Postman and JSON Schema -With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, we are honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors---[Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), Greg Dennis, Jason Desrosiers, and Julian Berman---as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file +With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, we are honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), Greg Dennis, Jason Desrosiers, and Julian Berman - as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file From edebfa9c37ed394534fa60c67c9ac090c40f6e8b Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Mon, 31 Jul 2023 10:35:18 +0100 Subject: [PATCH 04/11] Correct identification of "us" to "Postman" Co-authored-by: Julian Berman --- pages/posts/postman-case-study.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index 309a00d8..ff47e0a6 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -13,7 +13,7 @@ canonicalLink: https://blog.postman.com/how-postman-uses-json-schema/ > Originally published at [blog.postman.com](https://blog.postman.com/how-postman-uses-json-schema). -The [Postman API Platform](https://blog.postman.com/announcing-postman-v10/) offers a rich set of solutions for every step of the [API lifecycle](https://www.postman.com/api-platform/api-lifecycle/). Through the years, we have witnessed from the front row how JSON Schema entered the scene to become the industry standard for describing and annotating JSON documents. While many alternatives came and went, JSON Schema unquestionably proved to be the robust and extensible foundation behind the API specification movement. According to our [2022 State of the API Report](https://www.postman.com/state-of-api/api-technologies/#api-technologies), an impressive 72% of respondents chose JSON Schema as their preferred API specification. +The [Postman API Platform](https://blog.postman.com/announcing-postman-v10/) offers a rich set of solutions for every step of the [API lifecycle](https://www.postman.com/api-platform/api-lifecycle/). Through the years, we have witnessed from the front row how JSON Schema entered the scene to become the industry standard for describing and annotating JSON documents. While many alternatives came and went, JSON Schema unquestionably proved to be the robust and extensible foundation behind the API specification movement. According to Postman's [2022 State of the API Report](https://www.postman.com/state-of-api/api-technologies/#api-technologies), an impressive 72% of respondents chose JSON Schema as their preferred API specification. With JSON Schema being so ingrained in how APIs are developed today, it is hard to find a place in the Postman organization or the Postman API Platform where JSON Schema is not involved in some way or another. And with the modern (and increasing) importance of [API-first](https://www.postman.com/use-cases/api-first-development/) development, the use of API specifications plays a critical role in designing and sharing APIs. JSON Schema is currently the backbone of the most popular API specification technologies in the world, including [OpenAPI](https://www.openapis.org/), [AsyncAPI](https://www.asyncapi.com/), and [RAML](https://raml.org/). @@ -23,15 +23,15 @@ With JSON Schema being so ingrained in how APIs are developed today, it is hard Postman operates a complex distributed system consisting of many dozens of microservices powering the cloud tools that make the Postman API Platform. These microservices make use of JSON Schema to model their interfaces through standalone JSON Schema definitions or OpenAPI and AsyncAPI specifications. Many of these microservices also use JSON Schema under the hood to validate internal data structures and configuration files, and to perform end-to-end testing by either asserting on expected responses or auto-generating input data from JSON Schema definitions. Being a Node.js company, we have started efforts to analyze how we can rely on TypeScript annotations to automatically generate OpenAPI and AsyncAPI definitions from our codebases. -Given the importance of API specifications for managing our distributed systems, in 2021 we conducted a comprehensive internal research project to understand the diverse set of JSON Schema definitions introduced by our set of microservices. The corresponding JSON Schema definitions were analyzed based on characteristics such as reusability, degree of similarity, uniqueness ratio, and type of content. To promote reusability and discoverability, Postman is exploring the idea of a new microservice that acts as a central JSON Schema catalog API. +Given the importance of API specifications for managing Postman's distributed systems, in 2021 a comprehensive internal research project was conducted to understand the diverse set of JSON Schema definitions introduced by microservices run within the internal Postman platform. The corresponding JSON Schema definitions were analyzed based on characteristics such as reusability, degree of similarity, uniqueness ratio, and type of content. To promote reusability and discoverability, Postman is exploring the idea of a new microservice that acts as a central JSON Schema catalog API. -For analysis purposes, we periodically extract data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, we automatically convert SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into our internal data warehouse. We have conducted some initial experiments on generating SQL table definitions out of JSON Schema documents to make the latter the source of truth. +For analysis purposes, we periodically extract data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, we automatically convert SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into Postman's internal data warehouse. Some initial experiments have been conducted to explore generating SQL table definitions out of JSON Schema documents, making the latter the source of truth. ### Use cases of JSON Schema beyond APIs -The use of JSON Schema within the Postman organization is not restricted to our backend services. For example, the popular [Postman Collection](https://www.postman.com/collection/) JSON-based data format is formally defined using JSON Schema. Postman's [Newman](https://learning.postman.com/docs/collections/using-newman-cli/command-line-integration-with-newman/) command-line Collection Runner makes use of JSON Schema to validate the expected output of custom reporters. Postman's in-house cross-platform desktop framework makes use of JSON Schema to validate and annotate profile definitions that declare the various variants of the desktop application (Stable, Canary, etc). Postman also maintains internal [C4](https://c4model.com/) diagrams of the Postman architecture defined using JSON and validated using JSON Schema. +The use of JSON Schema within the Postman organization is not restricted to its backend services. For example, the popular [Postman Collection](https://www.postman.com/collection/) JSON-based data format is formally defined using JSON Schema. Postman's [Newman](https://learning.postman.com/docs/collections/using-newman-cli/command-line-integration-with-newman/) command-line Collection Runner makes use of JSON Schema to validate the expected output of custom reporters. Postman's in-house cross-platform desktop framework makes use of JSON Schema to validate and annotate profile definitions that declare the various variants of the desktop application (Stable, Canary, etc). Postman also maintains internal [C4](https://c4model.com/) diagrams of the Postman architecture defined using JSON and validated using JSON Schema. -In early 2022, Postman released support for [gRPC and Protocol Buffers](https://blog.postman.com/postman-now-supports-grpc/). Internally, Postman is able to transform Protocol Buffers schema definitions into JSON Schema definitions and back again. The JSON Schema definitions corresponding to the Protocol Buffers schemas are used to provide type-hinting and auto-completion in the gRPC payload composer editor, to validate user input and to generate random data that matches a Protocol Buffers schema for testing purposes. This approach allows us to implement the aforementioned features on top of a single unified schema language: JSON Schema. +In early 2022, Postman released support for [gRPC and Protocol Buffers](https://blog.postman.com/postman-now-supports-grpc/). Internally, Postman is able to transform Protocol Buffers schema definitions into JSON Schema definitions and back again. The JSON Schema definitions corresponding to the Protocol Buffers schemas are used to provide type-hinting and auto-completion in the gRPC payload composer editor, to validate user input and to generate random data that matches a Protocol Buffers schema for testing purposes. This approach allows Postman to implement the aforementioned features on top of a single unified schema language: JSON Schema. ## JSON Schema in the Postman API Platform @@ -55,4 +55,4 @@ A key component of the Postman API Platform is the [Postman API Network](https:/ ## Postman and JSON Schema -With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, we are honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), Greg Dennis, Jason Desrosiers, and Julian Berman - as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file +With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), Greg Dennis, Jason Desrosiers, and Julian Berman - as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file From 87ccc4a7206c13f57153cc0e782de1f8ad71ee2d Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Mon, 31 Jul 2023 13:42:32 +0100 Subject: [PATCH 05/11] Update Juan's link to not Twitter --- pages/posts/postman-case-study.md | 2 +- pages/posts/w3c-wot-case-study.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index ff47e0a6..0eb7ef68 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -6,7 +6,7 @@ cover: /img/posts/2023/postman-case-study/cover.webp authors: - name: Juan Cruz Viotti photo: /img/avatars/jviotti.webp - link: https://twitter.com/jviottidc + link: https://www.jviotti.com/ excerpt: "Learn how JSON Schema continues to be a crucial component of the Postman API Platform and the API ecosystem." canonicalLink: https://blog.postman.com/how-postman-uses-json-schema/ --- diff --git a/pages/posts/w3c-wot-case-study.md b/pages/posts/w3c-wot-case-study.md index 2b7ed8cf..b6ba3a36 100644 --- a/pages/posts/w3c-wot-case-study.md +++ b/pages/posts/w3c-wot-case-study.md @@ -6,7 +6,7 @@ cover: /img/posts/2022/w3c-wot-case-study/cover.webp authors: - name: Juan Cruz Viotti photo: /img/avatars/jviotti.webp - link: https://twitter.com/jviottidc + link: https://www.jviotti.com/ excerpt: "Using JSON Schema at the W3C Web of Things to create an interoperability layer so that different IoT platforms, protocols and standards can operate together" language: en --- @@ -114,7 +114,7 @@ year. At the time of this writing, the Working Group consists of 96 participants representing 36 organizations and the Interest Group consists of 131 -participants representing 48 organizations. +participants representing 48 organizations. ![W3C Web of Things Examples](/blog/img/posts/2022/w3c-wot-case-study/wot-examples.webp) From 920e3079bcbc00bcdda29b0ef778974dd57f8ca9 Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Mon, 31 Jul 2023 14:02:06 +0100 Subject: [PATCH 06/11] Add disclaimer about Postman and employment of org members to the Postman case study --- pages/posts/postman-case-study.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index 0eb7ef68..c3d14116 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -13,6 +13,10 @@ canonicalLink: https://blog.postman.com/how-postman-uses-json-schema/ > Originally published at [blog.postman.com](https://blog.postman.com/how-postman-uses-json-schema). +
+Disclaimer: A number of members of the JSON Schema organization are employed by Postman, but this post is not sponsored content. +
+ The [Postman API Platform](https://blog.postman.com/announcing-postman-v10/) offers a rich set of solutions for every step of the [API lifecycle](https://www.postman.com/api-platform/api-lifecycle/). Through the years, we have witnessed from the front row how JSON Schema entered the scene to become the industry standard for describing and annotating JSON documents. While many alternatives came and went, JSON Schema unquestionably proved to be the robust and extensible foundation behind the API specification movement. According to Postman's [2022 State of the API Report](https://www.postman.com/state-of-api/api-technologies/#api-technologies), an impressive 72% of respondents chose JSON Schema as their preferred API specification. With JSON Schema being so ingrained in how APIs are developed today, it is hard to find a place in the Postman organization or the Postman API Platform where JSON Schema is not involved in some way or another. And with the modern (and increasing) importance of [API-first](https://www.postman.com/use-cases/api-first-development/) development, the use of API specifications plays a critical role in designing and sharing APIs. JSON Schema is currently the backbone of the most popular API specification technologies in the world, including [OpenAPI](https://www.openapis.org/), [AsyncAPI](https://www.asyncapi.com/), and [RAML](https://raml.org/). From 948806b2b62456c53c7d8fe446c87094cd446a58 Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Thu, 10 Aug 2023 10:38:16 +0100 Subject: [PATCH 07/11] Add links to other core member intro articles --- pages/posts/postman-case-study.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index c3d14116..f9edf512 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -59,4 +59,4 @@ A key component of the Postman API Platform is the [Postman API Network](https:/ ## Postman and JSON Schema -With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), Greg Dennis, Jason Desrosiers, and Julian Berman - as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file +With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), [Greg Dennis](https://json-schema.org/blog/posts/and-then-there-were-three), (Jason Desrosiers)[https://json-schema.org/blog/posts/joining-postman], and [Julian Berman](https://json-schema.org/blog/posts/hello-world-hello-postman) - as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file From 800c8be6ec5eead6f25432251505a3ca3b301224 Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Thu, 10 Aug 2023 10:38:40 +0100 Subject: [PATCH 08/11] Remove unrequired bold on titles --- pages/posts/postman-case-study.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index f9edf512..961f0321 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -41,19 +41,19 @@ In early 2022, Postman released support for [gRPC and Protocol Buffers](https:// JSON Schema is not only used internally to develop the various components of the Postman API Platform - many of the features offered by Postman directly involve the use of JSON Schema. -### **JSON Schema in the context of Postman Collections** +### JSON Schema in the context of Postman Collections The Postman app can be used to [convert a growing number of API specification formats into Postman Collections](https://learning.postman.com/docs/developer/collection-conversion/). As noted earlier in this post, the most popular API specification formats such as OpenAPI, Swagger, and RAML rely on JSON Schema. In many cases, the API specification conversion logic requires generating random JSON documents that match a JSON Schema definition. When defining a Postman Collection, users may define JavaScript-based test and pre-request scripts that are executed automatically when running the corresponding collection. The JavaScript engine embedded within Postman to run these scripts integrates with the popular [AJV](https://ajv.js.org/) JSON Schema validator. With it, Postman users write scripts that employ JSON Schema validation using a wide range of JSON Schema specification versions. -### **JSON Schema in the context of OpenAPI** +### JSON Schema in the context of OpenAPI The Postman app provides a rich [OpenAPI editor](https://learning.postman.com/docs/designing-and-developing-your-api/defining-an-api/) with advanced JSON Schema capabilities. The editor is able to show autocompletion and syntax warnings, and it also highlights [potential areas of improvements](https://learning.postman.com/docs/api-governance/api-definition/api-definition-warnings/) with regards to readability and security for JSON Schema and OpenAPI endpoint definitions. An OpenAPI definition is then used to generate [rich documentation](https://learning.postman.com/docs/publishing-your-api/documenting-your-api/) of the available endpoints and their respective JSON Schema definitions, and to optionally generate matching [server code](https://learning.postman.com/docs/designing-and-developing-your-api/generating-server-code/) written in Go, Java, Python, and Node.js. An API defined using Postman is more than its API definition. It has surrounding elements such as documentation, tests, mock servers, and monitors. When writing an OpenAPI specification, Postman will [cross-check the integrity of each of these elements](https://learning.postman.com/docs/designing-and-developing-your-api/validating-elements-against-schema/) against the JSON Schema definitions included in the API specification. -### **The Postman API Network** +### The Postman API Network A key component of the Postman API Platform is the [Postman API Network](https://www.postman.com/api-network/), the [world's largest registry of public APIs](https://blog.postman.com/postman-public-api-network-is-now-the-worlds-largest-public-api-hub/). This global public registry includes a vast amount of APIs and their corresponding JSON Schema definitions typically maintained by their respective original authors. Some notable examples are the [Slack Web API](https://www.postman.com/slackhq/workspace/slack-api/collection/13509546-993e3b18-d277-4189-8ce5-af45df38e336), the [Docker HUB API](https://www.postman.com/dockerdev/workspace/docker-hub/collection/17990590-9574e087-2a50-4ecf-88b3-55f12a29d99e), and the [Twilio API](https://www.postman.com/twilio/workspace/twilio-api/overview). The Postman API Network is therefore one of the largest datasets of production-grade JSON Schema definitions. From 19bddbf847bcc5a3f4fb7f4389bbfc8d43ef765c Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Thu, 10 Aug 2023 10:45:14 +0100 Subject: [PATCH 09/11] Correct use of 'we' to 'Postman' as appropriate --- pages/posts/postman-case-study.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index 961f0321..363c87d7 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -25,11 +25,11 @@ With JSON Schema being so ingrained in how APIs are developed today, it is hard ### How Postman uses JSON Schema to build its own APIs -Postman operates a complex distributed system consisting of many dozens of microservices powering the cloud tools that make the Postman API Platform. These microservices make use of JSON Schema to model their interfaces through standalone JSON Schema definitions or OpenAPI and AsyncAPI specifications. Many of these microservices also use JSON Schema under the hood to validate internal data structures and configuration files, and to perform end-to-end testing by either asserting on expected responses or auto-generating input data from JSON Schema definitions. Being a Node.js company, we have started efforts to analyze how we can rely on TypeScript annotations to automatically generate OpenAPI and AsyncAPI definitions from our codebases. +Postman operates a complex distributed system consisting of many dozens of microservices powering the cloud tools that make the Postman API Platform. These microservices make use of JSON Schema to model their interfaces through standalone JSON Schema definitions or OpenAPI and AsyncAPI specifications. Many of these microservices also use JSON Schema under the hood to validate internal data structures and configuration files, and to perform end-to-end testing by either asserting on expected responses or auto-generating input data from JSON Schema definitions. Being a Node.js company, Postman havs started efforts to analyze how they can rely on TypeScript annotations to automatically generate OpenAPI and AsyncAPI definitions from our codebases. Given the importance of API specifications for managing Postman's distributed systems, in 2021 a comprehensive internal research project was conducted to understand the diverse set of JSON Schema definitions introduced by microservices run within the internal Postman platform. The corresponding JSON Schema definitions were analyzed based on characteristics such as reusability, degree of similarity, uniqueness ratio, and type of content. To promote reusability and discoverability, Postman is exploring the idea of a new microservice that acts as a central JSON Schema catalog API. -For analysis purposes, we periodically extract data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, we automatically convert SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into Postman's internal data warehouse. Some initial experiments have been conducted to explore generating SQL table definitions out of JSON Schema documents, making the latter the source of truth. +For analysis purposes, Postman periodically extract data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, Postman automatically convert SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into Postman's internal data warehouse. Some initial experiments have been conducted to explore generating SQL table definitions out of JSON Schema documents, making the latter the source of truth. ### Use cases of JSON Schema beyond APIs @@ -59,4 +59,4 @@ A key component of the Postman API Platform is the [Postman API Network](https:/ ## Postman and JSON Schema -With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), [Greg Dennis](https://json-schema.org/blog/posts/and-then-there-were-three), (Jason Desrosiers)[https://json-schema.org/blog/posts/joining-postman], and [Julian Berman](https://json-schema.org/blog/posts/hello-world-hello-postman) - as Postmanauts. We can't know everything about what the future might hold, but we are certain that the future of APIs involves JSON Schema. \ No newline at end of file +With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), [Greg Dennis](https://json-schema.org/blog/posts/and-then-there-were-three), (Jason Desrosiers)[https://json-schema.org/blog/posts/joining-postman], and [Julian Berman](https://json-schema.org/blog/posts/hello-world-hello-postman) - as Postmanauts. We can't know everything about what the future might hold, but Postman is certain that the future of APIs involves JSON Schema. \ No newline at end of file From 4400a563bcbb775d6c4257102a7a7c6597819e0c Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Thu, 10 Aug 2023 12:01:55 +0100 Subject: [PATCH 10/11] Fix incorrect link format in markdown --- pages/posts/postman-case-study.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index 363c87d7..b3be76a7 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -59,4 +59,4 @@ A key component of the Postman API Platform is the [Postman API Network](https:/ ## Postman and JSON Schema -With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), [Greg Dennis](https://json-schema.org/blog/posts/and-then-there-were-three), (Jason Desrosiers)[https://json-schema.org/blog/posts/joining-postman], and [Julian Berman](https://json-schema.org/blog/posts/hello-world-hello-postman) - as Postmanauts. We can't know everything about what the future might hold, but Postman is certain that the future of APIs involves JSON Schema. \ No newline at end of file +With JSON Schema being a crucial component of the Postman API Platform and the API ecosystem, Postman is honored to be supporting the JSON Schema organization as part of the [OpenJS foundation](https://json-schema.org/blog/posts/json-schema-joins-the-openjsf) by bringing aboard some of its passionate core contributors - [Ben Hutton](https://blog.postman.com/ben-hutton-joins-postman-to-lead-json-schema-strategy/), [Greg Dennis](https://json-schema.org/blog/posts/and-then-there-were-three), [Jason Desrosiers](https://json-schema.org/blog/posts/joining-postman), and [Julian Berman](https://json-schema.org/blog/posts/hello-world-hello-postman) - as Postmanauts. We can't know everything about what the future might hold, but Postman is certain that the future of APIs involves JSON Schema. \ No newline at end of file From 5f6297a687ea389f743158fd58d70d6269ed1e39 Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Thu, 10 Aug 2023 12:03:33 +0100 Subject: [PATCH 11/11] Fix typo and grammar --- pages/posts/postman-case-study.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/posts/postman-case-study.md b/pages/posts/postman-case-study.md index b3be76a7..7bc83675 100644 --- a/pages/posts/postman-case-study.md +++ b/pages/posts/postman-case-study.md @@ -25,11 +25,11 @@ With JSON Schema being so ingrained in how APIs are developed today, it is hard ### How Postman uses JSON Schema to build its own APIs -Postman operates a complex distributed system consisting of many dozens of microservices powering the cloud tools that make the Postman API Platform. These microservices make use of JSON Schema to model their interfaces through standalone JSON Schema definitions or OpenAPI and AsyncAPI specifications. Many of these microservices also use JSON Schema under the hood to validate internal data structures and configuration files, and to perform end-to-end testing by either asserting on expected responses or auto-generating input data from JSON Schema definitions. Being a Node.js company, Postman havs started efforts to analyze how they can rely on TypeScript annotations to automatically generate OpenAPI and AsyncAPI definitions from our codebases. +Postman operates a complex distributed system consisting of many dozens of microservices powering the cloud tools that make the Postman API Platform. These microservices make use of JSON Schema to model their interfaces through standalone JSON Schema definitions or OpenAPI and AsyncAPI specifications. Many of these microservices also use JSON Schema under the hood to validate internal data structures and configuration files, and to perform end-to-end testing by either asserting on expected responses or auto-generating input data from JSON Schema definitions. Being a Node.js company, Postman have started efforts to analyze how they can rely on TypeScript annotations to automatically generate OpenAPI and AsyncAPI definitions from our codebases. Given the importance of API specifications for managing Postman's distributed systems, in 2021 a comprehensive internal research project was conducted to understand the diverse set of JSON Schema definitions introduced by microservices run within the internal Postman platform. The corresponding JSON Schema definitions were analyzed based on characteristics such as reusability, degree of similarity, uniqueness ratio, and type of content. To promote reusability and discoverability, Postman is exploring the idea of a new microservice that acts as a central JSON Schema catalog API. -For analysis purposes, Postman periodically extract data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, Postman automatically convert SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into Postman's internal data warehouse. Some initial experiments have been conducted to explore generating SQL table definitions out of JSON Schema documents, making the latter the source of truth. +For analysis purposes, Postman periodically extracts data from every SQL-based database powering the Postman API Platform. To accommodate for schema changes in our services, Postman automatically converts SQL table definitions into JSON Schema definitions, and rows into JSON documents, before aggregating them into Postman's internal data warehouse. Some initial experiments have been conducted to explore generating SQL table definitions out of JSON Schema documents, making the latter the source of truth. ### Use cases of JSON Schema beyond APIs