{"id":3568,"date":"2025-12-24T10:00:10","date_gmt":"2025-12-24T15:00:10","guid":{"rendered":"https:\/\/www.mymiller.name\/wordpress\/?p=3568"},"modified":"2025-12-24T10:00:10","modified_gmt":"2025-12-24T15:00:10","slug":"spring-data-rest-simplify-restful-api-development-2","status":"publish","type":"post","link":"https:\/\/www.mymiller.name\/wordpress\/spring_rest\/spring-data-rest-simplify-restful-api-development-2\/","title":{"rendered":"Spring Data REST: Simplify RESTful API Development"},"content":{"rendered":"\n<div class=\"wp-block-jetpack-markdown\"><p>Spring Data REST is a Spring module that automatically creates RESTful APIs for Spring Data repositories. It eliminates boilerplate code, allowing you to focus on your application\u2019s core logic.<\/p>\n<p><strong>Benefits:<\/strong><\/p>\n<ul>\n<li><strong>Reduced Boilerplate:<\/strong> No need to write controllers for CRUD operations.<\/li>\n<li><strong>Hypermedia-Driven:<\/strong> APIs are discoverable through links (HAL).<\/li>\n<li><strong>Customization:<\/strong> Fine-tune the API\u2019s behavior using configuration or annotations.<\/li>\n<\/ul>\n<p><strong>Implementation:<\/strong><\/p>\n<ol>\n<li>\n<p><strong>Project Setup:<\/strong> Create a Spring Boot project with Spring Data REST and your database dependency.<\/p>\n<\/li>\n<li>\n<p><strong>Entity:<\/strong><\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-java\">@Entity\npublic class Book {\n    @Id\n    @GeneratedValue\n    private Long id;\n    private String title;\n    private String author;\n    \/\/ getters and setters\n}\n<\/code><\/pre>\n<ol start=\"3\">\n<li><strong>Repository:<\/strong><\/li>\n<\/ol>\n<pre><code class=\"language-java\">@RepositoryRestResource\npublic interface BookRepository extends JpaRepository&lt;Book, Long&gt; {\n}\n<\/code><\/pre>\n<p><strong>API Endpoints (Book):<\/strong><\/p>\n<ul>\n<li>\n<p><strong>GET \/books (List all books with pagination, sorting, and filtering):<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Input:<\/strong><\/p>\n<ul>\n<li><code>page<\/code> (optional): Page number (default: 0)<\/li>\n<li><code>size<\/code> (optional): Page size (default: 20)<\/li>\n<li><code>sort<\/code> (optional): Sorting criteria (e.g., <code>title,asc<\/code> or <code>author,desc<\/code>)<\/li>\n<li><code>title<\/code> (optional): Filter by title (substring match)<\/li>\n<li><code>author<\/code> (optional): Filter by author (substring match)<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Output:<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n  &quot;_embedded&quot;: {\n    &quot;books&quot;: [\n      {\n        &quot;title&quot;: &quot;The Hitchhiker's Guide to the Galaxy&quot;,\n        &quot;author&quot;: &quot;Douglas Adams&quot;,\n        &quot;_links&quot;: {\n          &quot;self&quot;: { &quot;href&quot;: &quot;\/books\/1&quot; },\n          &quot;book&quot;: { &quot;href&quot;: &quot;\/books\/1&quot; }\n        }\n      },\n      \/\/ ... more books\n    ]\n  },\n  &quot;_links&quot;: {\n    &quot;self&quot;: { &quot;href&quot;: &quot;\/books?page=0&amp;size=20&quot; },\n    &quot;first&quot;: { &quot;href&quot;: &quot;\/books?page=0&amp;size=20&quot; },\n    &quot;prev&quot;: { &quot;href&quot;: &quot;\/books?page=0&amp;size=20&quot; }, \/\/ if applicable\n    &quot;next&quot;: { &quot;href&quot;: &quot;\/books?page=1&amp;size=20&quot; }, \/\/ if applicable\n    &quot;last&quot;: { &quot;href&quot;: &quot;\/books?page=5&amp;size=20&quot; }, \/\/ if applicable\n    &quot;profile&quot;: { &quot;href&quot;: &quot;\/profile\/books&quot; }\n  },\n  &quot;page&quot;: {\n    &quot;size&quot;: 20,\n    &quot;totalElements&quot;: 100,\n    &quot;totalPages&quot;: 5,\n    &quot;number&quot;: 0\n  }\n}\n<\/code><\/pre>\n<ul>\n<li>\n<p><strong>GET \/books\/{id} (Get a book by ID):<\/strong><\/p>\n<ul>\n<li><strong>Input:<\/strong> Book ID (e.g., <code>\/books\/1<\/code>)<\/li>\n<li><strong>Output:<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n    &quot;title&quot;: &quot;The Hitchhiker's Guide to the Galaxy&quot;,\n    &quot;author&quot;: &quot;Douglas Adams&quot;,\n    &quot;_links&quot;: {\n        &quot;self&quot;: { &quot;href&quot;: &quot;\/books\/1&quot; },\n        &quot;book&quot;: { &quot;href&quot;: &quot;\/books\/1&quot; }\n    }\n}\n<\/code><\/pre>\n<ul>\n<li>\n<p><strong>POST \/books (Create a new book):<\/strong><\/p>\n<ul>\n<li><strong>Input:<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n    &quot;title&quot;: &quot;The Hitchhiker's Guide to the Galaxy&quot;,\n    &quot;author&quot;: &quot;Douglas Adams&quot;\n}\n<\/code><\/pre>\n<ul>\n<li><strong>Output:<\/strong><\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n    &quot;title&quot;: &quot;The Hitchhiker's Guide to the Galaxy&quot;,\n    &quot;author&quot;: &quot;Douglas Adams&quot;,\n    &quot;_links&quot;: {\n        &quot;self&quot;: { &quot;href&quot;: &quot;\/books\/1&quot; },\n        &quot;book&quot;: { &quot;href&quot;: &quot;\/books\/1&quot; }\n    }\n}\n<\/code><\/pre>\n<ul>\n<li>\n<p><strong>PUT \/books\/{id} (Update a book):<\/strong><\/p>\n<ul>\n<li><strong>Input:<\/strong> Book ID and updated data (e.g., <code>\/books\/1<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-json\">{\n    &quot;title&quot;: &quot;The Restaurant at the End of the Universe&quot;,\n    &quot;author&quot;: &quot;Douglas Adams&quot;\n}\n<\/code><\/pre>\n<ul>\n<li>\n<p><strong>Output:<\/strong> Updated book data (similar to GET output)<\/p>\n<\/li>\n<li>\n<p><strong>DELETE \/books\/{id} (Delete a book):<\/strong><\/p>\n<ul>\n<li><strong>Input:<\/strong> Book ID (e.g., <code>\/books\/1<\/code>)<\/li>\n<li><strong>Output:<\/strong> <code>204 No Content<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>Viewing the API:<\/strong><\/p>\n<p>Spring Data REST provides a convenient way to explore your API using the HAL browser. After starting your application, navigate to <code>http:\/\/localhost:8080<\/code> (or your configured port) in your web browser. This will open the HAL browser, allowing you to navigate through your API\u2019s resources and their relationships.<\/p>\n<p><strong>Accessing the API from Postman:<\/strong><\/p>\n<ol>\n<li><strong>Open Postman:<\/strong> Launch the Postman application.<\/li>\n<li><strong>Create a Request:<\/strong> Select the appropriate HTTP method (GET, POST, PUT, DELETE) and enter the API endpoint URL (e.g., <code>http:\/\/localhost:8080\/books<\/code>).<\/li>\n<li><strong>Set Headers (if required):<\/strong> For POST and PUT requests, set the <code>Content-Type<\/code> header to <code>application\/json<\/code>.<\/li>\n<li><strong>Add Body (if required):<\/strong> For POST and PUT requests, enter the request data in JSON format.<\/li>\n<li><strong>Send Request:<\/strong> Click the \u201cSend\u201d button to execute the request.<\/li>\n<li><strong>View Response:<\/strong> The response from the API will be displayed in the Postman interface.<\/li>\n<\/ol>\n<p><strong>Integrating Other APIs and HAL Browser Visibility:<\/strong><\/p>\n<p>To incorporate additional APIs outside of Spring Data REST\u2019s automatic generation:<\/p>\n<ol>\n<li><strong>Create a Controller:<\/strong> Use Spring\u2019s <code>@RestController<\/code> to define custom endpoints.<\/li>\n<li><strong>Define Endpoints:<\/strong> Use <code>@GetMapping<\/code>, <code>@PostMapping<\/code>, etc., to map HTTP methods to controller methods.<\/li>\n<li><strong>Handle Requests:<\/strong> Implement controller methods to process requests and return responses.<\/li>\n<li><strong>HAL Browser Integration (Optional):<\/strong>\n<ul>\n<li><strong>RepositoryLinksResource:<\/strong> Create a <code>ResourceProcessor&lt;RepositoryLinksResource&gt;<\/code> bean to add links to the root resource in the HAL browser.<\/li>\n<li><strong>ControllerLinkBuilder:<\/strong> Use <code>ControllerLinkBuilder<\/code> to generate links to your custom endpoints.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><strong>Example:<\/strong><\/p>\n<pre><code class=\"language-java\">@RestController\n@RequestMapping(&quot;\/api&quot;)\npublic class CustomApiController {\n\n    @GetMapping(&quot;\/hello&quot;)\n    public String sayHello() {\n        return &quot;Hello from custom API!&quot;;\n    }\n}\n<\/code><\/pre>\n<p>This creates a custom endpoint <code>\/api\/hello<\/code> that returns a simple string. By default, this endpoint will <strong>not<\/strong> be visible in the HAL browser. To make it visible, you need to add a <code>ResourceProcessor&lt;RepositoryLinksResource&gt;<\/code> bean to your project.<\/p>\n<p><strong>Generating OpenAPI Specification (JSON):<\/strong><\/p>\n<p>To get the entire API as an OpenAPI JSON specification, you can use the <code>springdoc-openapi<\/code> library.<\/p>\n<ol>\n<li><strong>Add Dependency:<\/strong> Add the <code>springdoc-openapi-ui<\/code> dependency to your project.<\/li>\n<li><strong>Access OpenAPI Endpoint:<\/strong> Access the generated OpenAPI specification at <code>http:\/\/localhost:8080\/v3\/api-docs<\/code> (replace <code>8080<\/code> with your configured port).<\/li>\n<\/ol>\n<p><strong>Conclusion:<\/strong><\/p>\n<p>Spring Data REST is a powerful tool for rapid REST API development, particularly for data-centric applications. It\u2019s easy to integrate custom APIs alongside Spring Data REST to provide additional functionality. While custom endpoints won\u2019t automatically appear in the HAL browser, you can explicitly add them using a <code>ResourceProcessor&lt;RepositoryLinksResource&gt;<\/code> for seamless integration. Additionally, generating the OpenAPI specification allows easy integration with API documentation and testing tools.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":3448,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[447],"tags":[69,319],"series":[397],"class_list":["post-3568","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spring_rest","tag-java-2","tag-spring","series-spring"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2023\/11\/network-3152677_640.jpg?fit=640%2C427&ssl=1","jetpack-related-posts":[{"id":3553,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_databases\/spring-data-rest-simplify-restful-api-development\/","url_meta":{"origin":3568,"position":0},"title":"Spring Data REST: Simplify RESTful API Development","author":"Jeffery Miller","date":"September 22, 2025","format":false,"excerpt":"Spring Data REST: Simplify RESTful API Development What is Spring Data REST? Spring Data REST is a Spring module that automatically creates RESTful APIs for Spring Data repositories. It eliminates boilerplate code, allowing you to focus on your application\u2019s core logic. Benefits: Reduced Boilerplate: No need to write controllers for\u2026","rel":"","context":"In &quot;Spring Databases&quot;","block_context":{"text":"Spring Databases","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_databases\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/desk-593327_1280.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/desk-593327_1280.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/desk-593327_1280.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/desk-593327_1280.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/desk-593327_1280.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3820,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_rest\/effortless-api-creation-generating-crud-endpoints-with-spring-data-rest\/","url_meta":{"origin":3568,"position":1},"title":"Effortless API Creation: Generating CRUD Endpoints with Spring Data REST","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Building RESTful APIs for your data can often feel like a repetitive task. Defining endpoints, handling HTTP methods (GET, POST, PUT, DELETE), serializing and deserializing data \u2013 it all adds up. But what if you could significantly reduce this boilerplate and focus on your core domain logic? Enter Spring Data\u2026","rel":"","context":"In &quot;Spring Rest&quot;","block_context":{"text":"Spring Rest","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_rest\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/05\/ai-generated-8041774_640.jpg?fit=640%2C479&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/05\/ai-generated-8041774_640.jpg?fit=640%2C479&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/05\/ai-generated-8041774_640.jpg?fit=640%2C479&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3834,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_rest\/documenting-your-datas-reach-generating-api-docs-for-spring-data-rest\/","url_meta":{"origin":3568,"position":2},"title":"Documenting Your Data&#8217;s Reach: Generating API Docs for Spring Data REST","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Spring Data REST is a fantastic tool for rapidly exposing your JPA entities as hypermedia-driven REST APIs. However, even the most intuitive APIs benefit from clear and comprehensive documentation. While HATEOAS provides discoverability at runtime, static documentation offers a bird\u2019s-eye view, making it easier for developers to understand the API\u2019s\u2026","rel":"","context":"In &quot;Spring Rest&quot;","block_context":{"text":"Spring Rest","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_rest\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/network-5987786_1280-jpg.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/network-5987786_1280-jpg.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/network-5987786_1280-jpg.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/network-5987786_1280-jpg.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/network-5987786_1280-jpg.avif 3x"},"classes":[]},{"id":3935,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_ai\/%f0%9f%9a%80-dl4j-and-spring-boot-real-time-anomaly-detection-in-time-series-data\/","url_meta":{"origin":3568,"position":3},"title":"\ud83d\ude80 DL4J and Spring Boot: Real-Time Anomaly Detection in Time-Series Data","author":"Jeffery Miller","date":"November 25, 2025","format":false,"excerpt":"As a Software Architect, you understand that an excellent solution requires not just a powerful model, but a robust, scalable, and performant architecture for deployment. The combination of DL4J (Deeplearning4j) and Spring Boot is perfectly suited for building real-time, high-performance services, especially for a critical task like time-series anomaly detection.\u2026","rel":"","context":"In &quot;Spring AI&quot;","block_context":{"text":"Spring AI","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_ai\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_ek9cohek9cohek9c.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_ek9cohek9cohek9c.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_ek9cohek9cohek9c.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_ek9cohek9cohek9c.avif 2x"},"classes":[]},{"id":3740,"url":"https:\/\/www.mymiller.name\/wordpress\/springboot\/threading-in-spring-a-comprehensive-guide\/","url_meta":{"origin":3568,"position":4},"title":"Threading in Spring: A Comprehensive Guide","author":"Jeffery Miller","date":"December 23, 2025","format":false,"excerpt":"Threading is a crucial aspect of building modern, high-performance applications. It allows you to execute multiple tasks concurrently, improving responsiveness and utilizing system resources effectively. Spring Framework provides robust support for managing and using threads, simplifying development and ensuring efficiency. This article explores thread usage in Spring, delves into different\u2026","rel":"","context":"In &quot;Springboot&quot;","block_context":{"text":"Springboot","link":"https:\/\/www.mymiller.name\/wordpress\/category\/springboot\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8248619_1280-jpg.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8248619_1280-jpg.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8248619_1280-jpg.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8248619_1280-jpg.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8248619_1280-jpg.avif 3x"},"classes":[]},{"id":3836,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_rest\/testing-the-waters-writing-effective-unit-tests-for-spring-data-rest-apis\/","url_meta":{"origin":3568,"position":5},"title":"Testing the Waters: Writing Effective Unit Tests for Spring Data REST APIs","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Spring Data REST is a powerful tool for rapidly exposing your JPA entities as RESTful APIs with minimal code. However, the \u201cminimal code\u201d aspect doesn\u2019t absolve you from the crucial responsibility of writing unit tests. While Spring Data REST handles much of the underlying API infrastructure, your business logic, entity\u2026","rel":"","context":"In &quot;Spring Rest&quot;","block_context":{"text":"Spring Rest","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_rest\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8136170_1280-png.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8136170_1280-png.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8136170_1280-png.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8136170_1280-png.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/10\/ai-generated-8136170_1280-png.avif 3x"},"classes":[]}],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/comments?post=3568"}],"version-history":[{"count":2,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3568\/revisions"}],"predecessor-version":[{"id":3630,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3568\/revisions\/3630"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media\/3448"}],"wp:attachment":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media?parent=3568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/categories?post=3568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/tags?post=3568"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/series?post=3568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}