{"id":2983,"date":"2025-01-07T15:05:10","date_gmt":"2025-01-07T21:05:10","guid":{"rendered":"https:\/\/readme.com\/resources\/?p=2983"},"modified":"2025-01-07T15:05:13","modified_gmt":"2025-01-07T21:05:13","slug":"an-example-filled-guide-to-swagger-3-2","status":"publish","type":"post","link":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2","title":{"rendered":"A Visual Guide to What&#8217;s New in Swagger 3.0"},"content":{"rendered":"\n<p>Over the past few years, Swagger 2 has become the de facto standard for defining or documenting your API. Since then, it&#8217;s been moved to the Linux foundation and renamed to&nbsp;<strong>OpenAPI Spec<\/strong>. Version 3 has been in the works for a while, and it&#8217;s finally feature complete! Here&#8217;s a guide to what&#8217;s changed, and how to upgrade from Swagger 2 to OpenAPI 3.<\/p>\n\n\n\n<p><em>Like Swagger? ReadMe just\u00a0launched support\u00a0for Swagger 2! Try it out now!<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"formatchanges\">Format Changes<\/h3>\n\n\n\n<p>Swagger 3 will still be in JSON or YAML, however some minor things have been changed about the formats used.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Swagger has been renamed OpenAPI, although this post will use them somewhat interchangeably.<\/li>\n\n\n\n<li>OpenAPI 3 now specifies YAML should be 1.2, which has been out since 2009 so it shouldn&#8217;t break anything. It&#8217;s just a clarification. (However, only features that can be transpiled to JSON are allowed.)<\/li>\n\n\n\n<li>The project is adopting Semver for versioning. So while the previous version is 2.0, the new will be 3.0.0.<\/li>\n\n\n\n<li>Github Flavored Markdown will be replaced with CommonMark. Not much will change, since CommonMark is mostly just an attempt to standardize what most sites refer to as GFM (<a href=\"https:\/\/githubengineering.com\/a-formal-spec-for-github-markdown\/?ref=blog.readme.com\">even GitHub is doing something similar<\/a>).<\/li>\n\n\n\n<li>Swagger now supports more of JSON Schema (oneOf, anyOf, not, nullable, deprecated, writeOnly), and clarifies JSON References a bit.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"urlstructure\">URL Structure<\/h3>\n\n\n\n<p>Currently, Swagger 2 lets you define schemes, a host and a baseUrl, which is combined into your URL. Now, you can have multiple \u201cURLs,\u201d and they can be defined anywhere\u2014meaning you can have just one at the base like before, or a specific endpoint can have its own server if the base URL is different. Additionally, path templating is now allowed. In OpenAPI 3, this was only allowed in the actual endpoint URLs. You define the templates with a \u201cvariable\u201d property.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"swagger2\">Swagger 2<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">info:\n  title: Swagger Sample App\nhost: example.com\nbasePath: \/v1\nschemes: ['http', 'https']\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"openapi3\">OpenAPI 3<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">servers:\n- url: https:\/\/{subdomain}.site.com\/{version}\n  description: The main prod server\n  variables:\n    subdomain:\n      default: production\n    version:\n      enum:\n        - v1\n        - v2\n      default: v2\n<\/code><\/pre>\n\n\n\n<p>There\u2019s a few minor changes to path items, too. They now can accept a description, and there&#8217;s support for&nbsp;<code>TRACE<\/code>. Thanks to&nbsp;<code>servers<\/code>&nbsp;, you can now give each path its own base URL. Lastly, you\u2019re no longer allowed to define a request body for&nbsp;<code>GET<\/code>&nbsp;and&nbsp;<code>DELETE<\/code>&nbsp;(which matches how RESTful APIs work).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"components\">Components<\/h3>\n\n\n\n<p>Swagger 2 had the concept of&nbsp;<code>definitions<\/code>, however they were somewhat arbitrary and weren\u2019t as well-defined. OpenAPI 3 attempts to standardize the concept into \u201ccomponents,\u201d which are definable objects that can be reused multiple places.<\/p>\n\n\n\n<p>Here\u2019s the list of OpenAPI 3 components:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>responses (existing)<\/li>\n\n\n\n<li>parameters (existing)<\/li>\n\n\n\n<li>examples (new)<\/li>\n\n\n\n<li>requestBodies (new)<\/li>\n\n\n\n<li>headers (new)<\/li>\n\n\n\n<li>links (new)<\/li>\n\n\n\n<li>callbacks (new)<\/li>\n\n\n\n<li>schemas (updated)<\/li>\n\n\n\n<li>securitySchemes (updated)<\/li>\n<\/ul>\n\n\n\n<p>So, rather than one \u201cdefinitions\u201d section with all references, you would now access something like&nbsp;<code>#\/components\/schemas\/Pet<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"requestformat\">Request Format<\/h3>\n\n\n\n<p>One of the most confusing aspects of Swagger 2 was body\/formData. They were a subset of parameters\u2014you could only have one or the other\u2014and if you went with body, the format was different than the rest of the parameters. (You could only have on&nbsp;<code>body<\/code>&nbsp;parameter, the name was irrelevant, the format was different, etc.)<\/p>\n\n\n\n<p>Now, body has been moved into its own section called requestBody, and formData has been merged into it. In addition, cookies has been added as a parameter type (in addition to the existing header, path and query options).<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"swagger2\">Swagger 2<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">\"\/pets\/{petId}\":\n  post:\n    parameters:\n    - name: petId\n      in: path\n      description: ID of pet to update\n      required: true\n      type: string\n    - name: user\n      in: body\n      description: user to add to the system\n      required: true\n      schema:\n        type: array\n        items:\n          type: string\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"openapi3\">OpenAPI 3<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">\n\"\/pets\/{petId}\":\n  post:\n    requestBody:\n      description: user to add to the system\n      required: true\n      content:\n        application\/json: \n          schema:\n            type: array\n            items:\n              $ref: '#\/components\/schemas\/Pet'\n          examples:\n            - name: Fluffy\n              petType: Cat\n            - http:\/\/example.com\/pet.json\n    parameters:\n      - name: petId\n        in: path\n        description: ID of pet to update\n        required: true\n        type: string\n<\/code><\/pre>\n\n\n\n<p>The requestBody has a lot of new features. You can now provide an&nbsp;<code>example<\/code>&nbsp;(or array of&nbsp;<code>examples<\/code>) for&nbsp;<code>requestBody<\/code>. This is pretty flexible (you can pass in a full example, a reference, or even a URL to the example).<\/p>\n\n\n\n<p>The new requestBody supports different media types (<code>content<\/code>&nbsp;is an array of mimetypes, like&nbsp;<code>application\/json<\/code>&nbsp;or&nbsp;<code>text\/plain<\/code>, although you can use&nbsp;<code>*\/*<\/code>&nbsp;as a catch-all).<\/p>\n\n\n\n<p>For parameters, you have two options on how you want to define them. You can define a \u201cschema\u201d (like in 2.0), which lets you describe the item. Or, if it\u2019s more complex, you can use \u201ccontent,\u201d which is the same as \u201crequestBody.\u201d<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"responseformat\">Response Format<\/h3>\n\n\n\n<p>Responses have also gotten an upgrade!<\/p>\n\n\n\n<p>Wildcard response codes mean you can now define a response for \u201c4xx\u201d rather than having to define each one separately.<\/p>\n\n\n\n<p>Responses and responses headers can both be more complex. You can use \u201ccontent\u201d objects (like in requests) for the payload.<\/p>\n\n\n\n<p>There\u2019s also the concept of callbacks, which allow you to define a webhook:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">    myWebhook:\n      '$request.body#\/url':\n        post:\n          requestBody:\n            description: Callback payload\n          content:\n            'application\/json':\n              schema:\n                $ref: '#\/components\/schemas\/SomePayload'\n              responses:\n                200:\n                  description: webhook processed!\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"linking\">Linking<\/h3>\n\n\n\n<p>Linking is one of the most interesting additions to OpenAPI 3. It\u2019s a bit complicated, but potentially incredibly powerful. It\u2019s basically a way of describing \u201cwhat\u2019s next\u201d. (For people familiar, it&#8217;s in the same vein as HATEOAS \/ Hypermedia APIs.)<\/p>\n\n\n\n<p>Let\u2019s say you get a user, and it has an&nbsp;<code>addressId<\/code>. This&nbsp;<code>addressId<\/code>&nbsp;is pretty useless by itself. You can use links to show how to \u201cexpand\u201d that, and get the full address.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">paths:\n  \/users\/{userId}:\n    get:\n      responses:\n        200:\n          links:\n            address:\n              operationId: getAddressWithAddressId\n              parameters:\n                addressId: '$response.body#\/addressId'\n<\/code><\/pre>\n\n\n\n<p>See what\u2019s happening there? In the response from \u201c\/users\/{userId}\u201d, we get back an&nbsp;<code>addressId<\/code>. The \u201clinks\u201d describes how we can get an address by referencing the \u201c$response.body#\/addressId\u201d.<\/p>\n\n\n\n<p>Another usecase is pagination. If you fetch 100 results,&nbsp;<code>links<\/code>&nbsp;can show how to get results 101-200. It\u2019s flexible, which means it can handle any pagination scheme from&nbsp;<code>limits<\/code>&nbsp;to&nbsp;<code>cursors<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"security\">Security<\/h3>\n\n\n\n<p>A bunch of changes to security! It\u2019s been renamed, OAuth2 flow names have been updated, you can have multiple flows, and there\u2019s support for OpenID Connect. The \u201cbasic\u201d type has been renamed to \u201chttp\u201d, and now security can have a \u201cscheme\u201d and a \u201cbearerFormat\u201d.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"swagger2\">Swagger 2<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">\nsecurityDefinitions:\n  UserSecurity:\n    type: basic\n  APIKey:\n    type: apiKey\n    name: Authorization\n    in: header\nsecurity:\n  - UserSecurity: []\n  - APIKey: []\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"openapi3\">OpenAPI 3<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"JavaScript\" class=\"language-JavaScript\">components:\n  securitySchemes:\n    UserSecurity:\n      type: http\n      scheme: basic\n    APIKey:\n      type: http\n      scheme: bearer\n      bearerFormat: TOKEN\nsecurity:\n  - UserSecurity: []\n  - APIKey: []\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"socanyouuseit\">So\u2026 can you use it?<\/h3>\n\n\n\n<p>The OpenAPI 3.0.0 Spec is currently out as a release candidate, and is considered feature complete. This means that nothing big will change, although some minor details might be refined or tweaked. The final spec should be done within a few months!<\/p>\n\n\n\n<p>Upgrading from Swagger 2.0 to OpenAPI 3.0.0 is lossless, meaning that it can be done without losing any data. Currently there is no tool to upgrade them (and no plans from the Open API Initiative to build one, although there will likely eventually be some options provided by vendors). [EDIT: Seems there is an unofficial one!&nbsp;<a href=\"https:\/\/github.com\/mermade\/swagger2openapi?ref=blog.readme.com\">mermade\/swagger2openapi<\/a>]<\/p>\n\n\n\n<p>You can get started with the spec here:\u00a0https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/OpenAPI.next\/versions\/3.0.md<\/p>\n\n\n\n<p>Even once the spec is finalized, having an OpenAPI 3 file is only as good as the products that support it. Since it\u2019s not backwards compatible, OpenAPI 3 specs won\u2019t work in tools that only support Swagger 2.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"thatsopenapi30\">That\u2019s OpenAPI 3.0!<\/h3>\n\n\n\n<p>Overall, I\u2019m impressed by 3.0. Most of the shortcomings we\u2019ve run into when supporting Swagger 2 on ReadMe have solved by OpenAPI 3. It comes with some additional complexity, however they\u2019ve done a great job at making Swagger reflect how most people currently build APIs.<\/p>\n\n\n\n<p><strong>Use Swagger?<\/strong>&nbsp;<a href=\"https:\/\/readme.com\/?ref=blog.readme.com\">Create beautiful API docs in seconds<\/a>.<\/p>\n\n\n\n<p><em>Thanks to&nbsp;<a href=\"https:\/\/twitter.com\/webron?ref=blog.readme.com\">Ron Ratovsky<\/a>! This post was based on his talks and blog posts.<\/em><\/p>\n\n\n\n<p><em>Does working to improve APIs across thousands of companies sound interesting to you? Are you obsessed with developer experiences and want to help us build the future of APIs? We\u2019re hiring for a bunch of roles at&nbsp;<a href=\"https:\/\/readme.com\/careers?ref=blog.readme.com\">https:\/\/readme.com\/careers<\/a>&nbsp;and can\u2019t wait to hear from you!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the past few years, Swagger 2 has become the de facto standard for defining or documenting your API. Since then, it&#8217;s been moved to the Linux foundation and renamed to&nbsp;OpenAPI Spec. Version 3 has been in the works for a while, and it&#8217;s finally feature complete! Here&#8217;s a guide to what&#8217;s changed, and how [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[22],"tags":[],"ppma_author":[55],"class_list":["post-2983","post","type-post","status-publish","format-standard","hentry","category-api-tips"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A Guide to Swagger 3.0 Improvements (2017)<\/title>\n<meta name=\"description\" content=\"Discover the latest features in Swagger 3.0 (OpenAPI 3.0) with our detailed guide, complete with examples to streamline your API documentation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Guide to Swagger 3.0 Improvements (2017)\" \/>\n<meta property=\"og:description\" content=\"Discover the latest features in Swagger 3.0 (OpenAPI 3.0) with our detailed guide, complete with examples to streamline your API documentation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2\" \/>\n<meta property=\"og:site_name\" content=\"ReadMe: Resource Library\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-07T21:05:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-07T21:05:13+00:00\" \/>\n<meta name=\"author\" content=\"Gregory Koberger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Miche Nickolaisen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2\",\"url\":\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2\",\"name\":\"A Guide to Swagger 3.0 Improvements (2017)\",\"isPartOf\":{\"@id\":\"https:\/\/readme.com\/resources\/#website\"},\"datePublished\":\"2025-01-07T21:05:10+00:00\",\"dateModified\":\"2025-01-07T21:05:13+00:00\",\"author\":{\"@id\":\"https:\/\/readme.com\/resources\/#\/schema\/person\/770bcc036178743133b5ba515195981b\"},\"description\":\"Discover the latest features in Swagger 3.0 (OpenAPI 3.0) with our detailed guide, complete with examples to streamline your API documentation.\",\"breadcrumb\":{\"@id\":\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/readme.com\/resources\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Visual Guide to What&#8217;s New in Swagger 3.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/readme.com\/resources\/#website\",\"url\":\"https:\/\/readme.com\/resources\/\",\"name\":\"ReadMe: Resource Library\",\"description\":\"Making API documentation better for everyone\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/readme.com\/resources\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/readme.com\/resources\/#\/schema\/person\/770bcc036178743133b5ba515195981b\",\"name\":\"Miche Nickolaisen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/readme.com\/resources\/#\/schema\/person\/image\/a24e32f88df84934c107cef6fa8d3223\",\"url\":\"https:\/\/readme.com\/resources\/wp-content\/uploads\/2024\/06\/IMG_7151-scaled-e1718387764646.jpg\",\"contentUrl\":\"https:\/\/readme.com\/resources\/wp-content\/uploads\/2024\/06\/IMG_7151-scaled-e1718387764646.jpg\",\"caption\":\"Miche Nickolaisen\"},\"description\":\"An Austin resident since 2009, Miche grew up in rural southwestern Missouri. When not working on ReadMe's content marketing, you can find them doing a number of hobbies, including (but not limited to) bouldering, martial arts, playing tabletop RPGs and\/or video games, bullet journaling, and making art. They live with a large menagerie of indoor pets and a smaller (outdoor) menagerie of feral cats they take care of (sometimes including a few possums and raccoons, just for good measure).\",\"url\":\"https:\/\/readme.com\/resources\/author\/miche\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A Guide to Swagger 3.0 Improvements (2017)","description":"Discover the latest features in Swagger 3.0 (OpenAPI 3.0) with our detailed guide, complete with examples to streamline your API documentation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2","og_locale":"en_US","og_type":"article","og_title":"A Guide to Swagger 3.0 Improvements (2017)","og_description":"Discover the latest features in Swagger 3.0 (OpenAPI 3.0) with our detailed guide, complete with examples to streamline your API documentation.","og_url":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2","og_site_name":"ReadMe: Resource Library","article_published_time":"2025-01-07T21:05:10+00:00","article_modified_time":"2025-01-07T21:05:13+00:00","author":"Gregory Koberger","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Miche Nickolaisen","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2","url":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2","name":"A Guide to Swagger 3.0 Improvements (2017)","isPartOf":{"@id":"https:\/\/readme.com\/resources\/#website"},"datePublished":"2025-01-07T21:05:10+00:00","dateModified":"2025-01-07T21:05:13+00:00","author":{"@id":"https:\/\/readme.com\/resources\/#\/schema\/person\/770bcc036178743133b5ba515195981b"},"description":"Discover the latest features in Swagger 3.0 (OpenAPI 3.0) with our detailed guide, complete with examples to streamline your API documentation.","breadcrumb":{"@id":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/readme.com\/resources\/an-example-filled-guide-to-swagger-3-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/readme.com\/resources\/"},{"@type":"ListItem","position":2,"name":"A Visual Guide to What&#8217;s New in Swagger 3.0"}]},{"@type":"WebSite","@id":"https:\/\/readme.com\/resources\/#website","url":"https:\/\/readme.com\/resources\/","name":"ReadMe: Resource Library","description":"Making API documentation better for everyone","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/readme.com\/resources\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/readme.com\/resources\/#\/schema\/person\/770bcc036178743133b5ba515195981b","name":"Miche Nickolaisen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/readme.com\/resources\/#\/schema\/person\/image\/a24e32f88df84934c107cef6fa8d3223","url":"https:\/\/readme.com\/resources\/wp-content\/uploads\/2024\/06\/IMG_7151-scaled-e1718387764646.jpg","contentUrl":"https:\/\/readme.com\/resources\/wp-content\/uploads\/2024\/06\/IMG_7151-scaled-e1718387764646.jpg","caption":"Miche Nickolaisen"},"description":"An Austin resident since 2009, Miche grew up in rural southwestern Missouri. When not working on ReadMe's content marketing, you can find them doing a number of hobbies, including (but not limited to) bouldering, martial arts, playing tabletop RPGs and\/or video games, bullet journaling, and making art. They live with a large menagerie of indoor pets and a smaller (outdoor) menagerie of feral cats they take care of (sometimes including a few possums and raccoons, just for good measure).","url":"https:\/\/readme.com\/resources\/author\/miche"}]}},"authors":[{"term_id":55,"user_id":0,"is_guest":1,"slug":"greg-koberger","display_name":"Gregory Koberger","avatar_url":{"url":"https:\/\/readme.com\/resources\/wp-content\/uploads\/2024\/06\/lSQSlvk3_400x400.jpeg","url2x":"https:\/\/readme.com\/resources\/wp-content\/uploads\/2024\/06\/lSQSlvk3_400x400.jpeg"},"first_name":"Gregory","last_name":"Koberger","position":"Founder, CEO","slogan":"","description":"Greg hails from the lovely town of Schaghticoke in upstate New York. After attending RIT he made the move to San Francisco where he worked for Mozilla and freelanced for a bunch of startups. He founded ReadMe after building docs sites for most of them. You can find him drinking coffee or obsessively competing for Swarm mayorships."}],"_links":{"self":[{"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/posts\/2983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/comments?post=2983"}],"version-history":[{"count":0,"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/posts\/2983\/revisions"}],"wp:attachment":[{"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/media?parent=2983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/categories?post=2983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/tags?post=2983"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/readme.com\/resources\/wp-json\/wp\/v2\/ppma_author?post=2983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}