{"version":1,"pages":[{"id":"-MYnZH06Aa7HliHlmsOX","title":"Book Cover","pathname":"/","siteSpaceId":"sitesp_xkCcd","description":""},{"id":"x94AORWI1HcFJ2qa0WNW","title":"About the Author","pathname":"/about-the-author","siteSpaceId":"sitesp_xkCcd","description":""},{"id":"6StbWPFMQxBZyT02hEHG","title":"Links and Resources","pathname":"/links-and-resources","siteSpaceId":"sitesp_xkCcd","description":""},{"id":"-MZ1M1qyiJDsDSZ3TJmS","title":"Foreword","pathname":"/part-1/foreword","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"}]},{"id":"-MZ0pmMOOtrKT2W0RiHj","title":"Preface","pathname":"/part-1/preface","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"}]},{"id":"-MZ0hN2ME8OQp2ohohW8","title":"Chapter 1: Introduction","pathname":"/part-1/chapter-1","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"}]},{"id":"-MZ0hN2TA4FttmljIPc8","title":"The Rise of REST and Distributed Systems","pathname":"/part-1/chapter-1/1-the-rise-of-rest-and-distributed-systems","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"},{"label":"Chapter 1: Introduction"}]},{"id":"-MZ0hN2RL4H02aflB83B","title":"Problem #1: Structureless Design, Structureless REST","pathname":"/part-1/chapter-1/2-problem-1-structureless-design-structureless-rest","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"},{"label":"Chapter 1: Introduction"}]},{"id":"-MZ0hN2L8f-d5qdfr8Kn","title":"The Emergence of JavaScript and Node.js","pathname":"/part-1/chapter-1/3-the-emergence-of-javascript-and-nodejs","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"},{"label":"Chapter 1: Introduction"}]},{"id":"-MZ0hN2PaNoZbSnAs1ZY","title":"Problem #2: Structureless JavaScript, Structureless Node.js","pathname":"/part-1/chapter-1/4-problem-2-structureless-javascript-structureless-nodejs","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"},{"label":"Chapter 1: Introduction"}]},{"id":"-MZ0hN2UwJ0Z2GLxpyTe","title":"Behold, the Solution: A Structured Approach","pathname":"/part-1/chapter-1/5-behold-the-solution-a-structured-approach","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"},{"label":"Chapter 1: Introduction"}]},{"id":"-MZ0hN2SWFIK84BIHU7s","title":"Summary","pathname":"/part-1/chapter-1/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part I: The Why"},{"label":"Chapter 1: Introduction"}]},{"id":"-MZ0o-nErRgQpx531zbO","title":"Chapter 2: REST Origins","pathname":"/part-2/chapter-2","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"}]},{"id":"-MZ0o-na3s8SfCRyi2my","title":"A Brief History of the Web and the Birth of REST","pathname":"/part-2/chapter-2/1-a-brief-history-of-the-web-and-the-birth-of-rest","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0o-nkWFJK0aP583Yh","title":"REST vs. HTTP","pathname":"/part-2/chapter-2/2-rest-vs-http","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0o-oJz9Jwpv5_xFOZ","title":"REST - The Abstract Web Architecture","pathname":"/part-2/chapter-2/3-rest-the-abstract-web-architecture","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0o-nP-KaRteWncGM_","title":"HTTP - A Peak at REST's Concrete Implementation","pathname":"/part-2/chapter-2/4-http-a-peak-at-rests-concrete-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0o-nZxgqFEF05Urq5","title":"What does it mean for an API to be RESTful?","pathname":"/part-2/chapter-2/5-what-does-it-mean-for-an-api-to-be-restful","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0o-nD-VwhTnlB_U1e","title":"Measuring \"RESTfulness\" with Richardson Maturity Model","pathname":"/part-2/chapter-2/6-measuring-restfulness-with-richardson-maturity-model","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0o-nGX4nJEg-bbi9I","title":"Pragmatic REST vs Dogmatic REST","pathname":"/part-2/chapter-2/7-pragmatic-rest-vs-dogmatic-rest","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0oVW1JUaqh83Kswyk","title":"Summary","pathname":"/part-2/chapter-2/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 2: REST Origins"}]},{"id":"-MZ0jn1oumtKpYxjcQxn","title":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\"","pathname":"/part-2/chapter-3","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"}]},{"id":"-MZ0jn2SsuBazawRAiiz","title":"Theories vs. Principles vs. Guidelines","pathname":"/part-2/chapter-3/1-theories-vs-principles-vs-guidelines","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn2RXWNHlEf-3YrS","title":"URI Design","pathname":"/part-2/chapter-3/2-uri-design","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn22muSoPy-Ghu_a","title":"Method Verbs","pathname":"/part-2/chapter-3/3-method-verbs","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn2B2pOmse3LtvyC","title":"Status Codes","pathname":"/part-2/chapter-3/4-status-codes","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn2HRiw6M3cgSUlH","title":"Representational Design","pathname":"/part-2/chapter-3/5-representational-design","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn2Qab2d31CTyud5","title":"Metadata Design","pathname":"/part-2/chapter-3/6-metadata-design","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn1x1pBUp0qOtuZF","title":"Versioning Strategies","pathname":"/part-2/chapter-3/7-versioning-strategies","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn24xF3iRz10F1SB","title":"Security Considerations","pathname":"/part-2/chapter-3/8-security-considerations","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn1noxcBeRZRtNse","title":"Documentation","pathname":"/part-2/chapter-3/9-documentation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn2DjnxGRXkLdRzT","title":"Case Study: GitHub","pathname":"/part-2/chapter-3/10-case-study-github","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0jn2-oZGSFto7AMKX","title":"Summary","pathname":"/part-2/chapter-3/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 3: RESTful API Design Guidelines and \"Best Practices\""}]},{"id":"-MZ0o-nI7QJoGgfkgrTP","title":"Chapter 4: Structured JavaScript Architecture","pathname":"/part-2/chapter-4","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"}]},{"id":"-MZ0o-oHFMiR-M70uAoH","title":"The Monstrous Monolith and Its Downfall","pathname":"/part-2/chapter-4/1-the-monstrous-monolith-and-its-downfall","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 4: Structured JavaScript Architecture"}]},{"id":"-MZ0o-nOmCFmZaQ_f8r1","title":"Layered/N-Tier Architecture: The Unpopular Proven Way","pathname":"/part-2/chapter-4/2-layered-n-tier-architecture-the-unpopular-proven-way","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 4: Structured JavaScript Architecture"}]},{"id":"-MZ0o-nHTakhuhi-f4eb","title":"Microservices and Distributed Computing: A Popular Misdirection","pathname":"/part-2/chapter-4/3-microservices-and-distributed-computing-a-popular-misdirection","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 4: Structured JavaScript Architecture"}]},{"id":"-MZ0o-o268BDnWcDYxJA","title":"Summary","pathname":"/part-2/chapter-4/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 4: Structured JavaScript Architecture"}]},{"id":"-MZ0o-n5wpV8akE8jcp3","title":"Chapter 5: The 8 Step Recipe","pathname":"/part-2/chapter-5","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"}]},{"id":"-MZ0o-nM29KvJVXslbm6","title":"Route Name (URI)","pathname":"/part-2/chapter-5/1-route-name-uri","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-n6o8D0f_NpSRyt","title":"Input Request","pathname":"/part-2/chapter-5/2-input-request","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-nYXZ2DXBlgG0g5","title":"Middleware","pathname":"/part-2/chapter-5/3-middleware","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-nFmZLgY8rABYKi","title":"Validation","pathname":"/part-2/chapter-5/4-validation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-oIoD1tmvRED_zC","title":"Domain","pathname":"/part-2/chapter-5/5-domain","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-nnCDik_odUo78l","title":"Events","pathname":"/part-2/chapter-5/6-events","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-oW1VaPASDiTKQF","title":"Output Response","pathname":"/part-2/chapter-5/7-output-response","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-o1o7oqOAcAzJ4i","title":"Test, Refactor, Document","pathname":"/part-2/chapter-5/8-test-refactor-document","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0o-nBDwKdN94TwzMk","title":"Summary","pathname":"/part-2/chapter-5/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 2: The Theory"},{"label":"Chapter 5: The 8 Step Recipe"}]},{"id":"-MZ0oVUXErh1FLL22sxa","title":"Chapter 6: Introduction to the Bookstore API","pathname":"/part-3/chapter-6","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"}]},{"id":"-MZ0oVX4ghuw8JDDR7pW","title":"The Bookstore API Endpoint Specifications","pathname":"/part-3/chapter-6/1-the-bookstore-api-endpoint-specifications","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 6: Introduction to the Bookstore API"}]},{"id":"-MZ0oVWHml5bA0A8hqvU","title":"API Design and Code Structure","pathname":"/part-3/chapter-6/2-api-design-and-code-structure","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 6: Introduction to the Bookstore API"}]},{"id":"-MZ0oVWmzRW0PeAfIwSB","title":"Project Setup","pathname":"/part-3/chapter-6/3-project-setup","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 6: Introduction to the Bookstore API"}]},{"id":"-MiXfIF2KJWSsyiZVrbf","title":"Summary","pathname":"/part-3/chapter-6/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 6: Introduction to the Bookstore API"}]},{"id":"-MZ0oVVegf99okM6EJKl","title":"Chapter 7: Retrieving Books from our API","pathname":"/part-3/chapter-7","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"}]},{"id":"-MZ0oVVdIAGNkDhGRbna","title":"Retrieving All Books - Planning","pathname":"/part-3/chapter-7/1-retrieving-all-books-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 7: Retrieving Books from our API"}]},{"id":"-MZ0oVVgDXdgQcO2ax1r","title":"Retrieving All Books - Implementation","pathname":"/part-3/chapter-7/2-retrieving-all-books-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 7: Retrieving Books from our API"}]},{"id":"-MZ0oVVqdTgxRg1xJ6uU","title":"Retrieving A Book By ID - Planning","pathname":"/part-3/chapter-7/3-retrieving-a-book-by-id-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 7: Retrieving Books from our API"}]},{"id":"-MZ0oVVtbSslzSm9jILM","title":"Retrieving A Book By ID - Implementation","pathname":"/part-3/chapter-7/4-retrieving-a-book-by-id-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 7: Retrieving Books from our API"}]},{"id":"-MinMJ4H6x6xIv_YYk0I","title":"Summary","pathname":"/part-3/chapter-7/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 7: Retrieving Books from our API"}]},{"id":"-MZ0oVWG_hUR2HYbxtJj","title":"Chapter 8: Adding Authentication to our API","pathname":"/part-3/chapter-8","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"}]},{"id":"-MZ0oVXwZG-N7mfcRwkc","title":"Registering the User - Planning","pathname":"/part-3/chapter-8/1-registering-the-user-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"-MZ0oVXtjz7f8vhIf2n5","title":"Registering the User - Implementation","pathname":"/part-3/chapter-8/2-registering-the-user-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"-MZ0oVXc373-4gsBRCFM","title":"Logging the User In - Planning","pathname":"/part-3/chapter-8/3-logging-the-user-in-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"-MZ0oVXRhEGlFI3qE0xd","title":"Logging the User In - Implementation","pathname":"/part-3/chapter-8/4-logging-the-user-in-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"-MZ0oVXHu1o9VcDSIOBP","title":"Getting Authenticated User - Planning","pathname":"/part-3/chapter-8/5-getting-authenticated-user-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"-MZ0oVXG0gpByB0FXT7e","title":"Getting Authenticated User - Implementation","pathname":"/part-3/chapter-8/6-getting-authenticated-user-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"LhrY32Icn01UBWNbgQ6Y","title":"Summary","pathname":"/part-3/chapter-8/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 8: Adding Authentication to our API"}]},{"id":"-MZ0oVUcJe46In8bVL0M","title":"Chapter 9: Adding the Create, Update, and Delete Operations to our API","pathname":"/part-3/chapter-9","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"}]},{"id":"-MZ0oVV-WrEz2eqnV6uI","title":"Creating A Book Listing - Planning","pathname":"/part-3/chapter-9/1-creating-a-book-listing-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"-MZ0oVUt9vcIpNBJwWbU","title":"Creating A Book Listing - Implementation","pathname":"/part-3/chapter-9/2-creating-a-book-listing-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"-MZ0oVUnhmSp3JM9UWPa","title":"Updating A Book Listing By ID - Planning","pathname":"/part-3/chapter-9/3-updating-a-book-listing-by-id-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"-MZ0oVUkCwYiYfZKhuvG","title":"Updating A Book Listing By ID - Implementation","pathname":"/part-3/chapter-9/4-updating-a-book-listing-by-id-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"-MZ0oVUj4A2l8mw6MLDW","title":"Deleting A Book Listing By ID - Planning","pathname":"/part-3/chapter-9/5-deleting-a-book-listing-by-id-planning","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"-MZ0oVUb1j0WnYOnEt-q","title":"Deleting A Book Listing By ID - Implementation","pathname":"/part-3/chapter-9/6-deleting-a-book-listing-by-id-implementation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"gq13iQwSyJTkyZ1VwWA3","title":"Summary","pathname":"/part-3/chapter-9/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 9: Adding the Create, Update, and Delete Operations to our API"}]},{"id":"-MZ0oVV3pwUEkC5W1i-N","title":"Chapter 10: Testing our API","pathname":"/part-3/chapter-10","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"}]},{"id":"-MZ0oVVH8j69DSRNkOiN","title":"Testing the Request","pathname":"/part-3/chapter-10/1-testing-the-request","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"-MZ0oVV6Lg-I7zIHDHCn","title":"Testing the Middleware","pathname":"/part-3/chapter-10/2-testing-the-middleware","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"wMgiXWmr9Ux7uqsKgozy","title":"Testing the Validation","pathname":"/part-3/chapter-10/3-testing-the-valdiation","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"wD8C3wCptdhczWJKY0r9","title":"Testing the Domain","pathname":"/part-3/chapter-10/4-testing-the-domain","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"XbFXDLQZ1reluIEuORUb","title":"Testing the Event","pathname":"/part-3/chapter-10/5-testing-the-event","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"K0Z3rKLFwbISPtkvskuY","title":"Testing the Response","pathname":"/part-3/chapter-10/6-testing-the-response","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"quhuq9NkmTtH134jBInJ","title":"Testing the Controller","pathname":"/part-3/chapter-10/7-testing-the-controller","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"-MZ0oVV2gNxFzgIGIX49","title":"Integration Test","pathname":"/part-3/chapter-10/8-integration-test","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"-MinMJ4bnIUU2JSFsLmS","title":"Summary","pathname":"/part-3/chapter-10/summary","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Part 3: The Code"},{"label":"Chapter 10: Testing our API"}]},{"id":"-MeMdv4x44UVdrkyUwRU","title":"Final Words","pathname":"/final-words/final-words","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Conclusion"}]},{"id":"-MZ0wWakYSDU66m1uene","title":"Refactoring to HATEOAS","pathname":"/bonus/refactoring-to-hateoas","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Bonus!"}]},{"id":"-MiXHXbH3lmg8CA-vXzQ","title":"Sources & References","pathname":"/appendix/references","siteSpaceId":"sitesp_xkCcd","description":"","breadcrumbs":[{"label":"Appendix"}]}]}