{"id":3987,"date":"2026-07-23T14:17:31","date_gmt":"2026-07-23T18:17:31","guid":{"rendered":"https:\/\/www.mymiller.name\/wordpress\/?p=3987"},"modified":"2026-07-23T14:17:33","modified_gmt":"2026-07-23T18:17:33","slug":"enterprise-ai-at-scale-why-spring-ai-and-java-are-built-for-the-long-run","status":"publish","type":"post","link":"https:\/\/www.mymiller.name\/wordpress\/spring_ai\/enterprise-ai-at-scale-why-spring-ai-and-java-are-built-for-the-long-run\/","title":{"rendered":"Enterprise AI at Scale: Why Spring AI and Java are Built for the Long Run"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">While Python remains the undisputed king of AI research, data exploration, and model training, the landscape shifts dramatically when moving from experimental notebooks to high-throughput, mission-critical production systems. For enterprise engineering teams building user-facing applications, workflow automations, and LLM-powered services, the real challenge isn&#8217;t training a model\u2014it&#8217;s integrating, scaling, securing, and maintaining AI capabilities within an existing infrastructure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is where <strong>Java<\/strong> and <strong>Spring AI<\/strong> enter the spotlight as the premier stack for scalable enterprise AI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Seamless Integration with Existing Enterprise Ecosystems<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">According to industry surveys, a vast majority of Fortune 500 backends run on the JVM. When an enterprise decides to incorporate generative AI\u2014whether for Retrieval-Augmented Generation (RAG), autonomous agents, or automated customer support\u2014building these features in Python often introduces architectural friction.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Polyglot Penalty<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Introducing Python services into a predominantly Java-based architecture requires:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Building and managing gRPC or REST microservices to bridge Java backends and Python AI workers.<\/li>\n\n\n\n<li>Managing disparate deployment pipelines, CI\/CD toolchains, and container registries.<\/li>\n\n\n\n<li>Duplicating domain models, authentication contexts, and validation logic across languages.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">The Spring Native Advantage<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With <strong>Spring AI<\/strong>, AI integration becomes just another Spring Boot starter (<code>spring-ai-openai-starter<\/code>, <code>spring-ai-pgvector-store-starter<\/code>, etc.). AI features live directly alongside existing business logic, sharing standard Spring paradigms:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spring Security<\/strong> for fine-grained access control and context propagation.<\/li>\n\n\n\n<li><strong>Spring Data<\/strong> for unified data access patterns.<\/li>\n\n\n\n<li><strong>Spring Cloud<\/strong> for service discovery, configuration, and resilience patterns.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. High Concurrency and Throughput: Virtual Threads (Project Loom)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">LLM applications are heavily <strong>I\/O bound<\/strong>. A single prompt interaction involves network latency to vector databases, external model APIs (OpenAI, Anthropic, Bedrock), and downstream webhooks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In traditional Python setups (like FastAPI or Flask with AsyncIO), managing asynchronous I\/O can quickly lead to &#8220;callback hell&#8221; or subtle concurrency bugs when handling complex multi-step agentic workflows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Java 21\u2019s <strong>Virtual Threads (Project Loom)<\/strong> fundamentally changes the concurrency model for I\/O-intensive workloads:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Million-Thread Scalability:<\/strong> Developers can write clean, imperative, synchronous-looking code while the JVM handles lightweight scheduling under the hood.<\/li>\n\n\n\n<li><strong>High-Throughput Streaming:<\/strong> Handling thousands of concurrent Server-Sent Events (SSE) or WebSocket streams for real-time token responses becomes trivial without exhausting system threads or memory.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Maintainability, Type Safety, and Refactoring at Scale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In small scripts or prototypes, Python\u2019s dynamic typing is a speed advantage. However, as codebases grow to hundreds of thousands of lines and involve dozens of engineers, dynamic typing becomes a liability.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Compile-Time Guarantees Matter in AI Workflows<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Structured Output &amp; Function Calling:<\/strong> Spring AI leverages Java\u2019s strongly typed <code>Record<\/code> types and reflection to map LLM JSON outputs directly into validated domain objects.<\/li>\n\n\n\n<li><strong>Refactoring Confidence:<\/strong> Renaming a property or updating a tool definition triggers immediate compile-time feedback across the entire project, avoiding runtime <code>KeyError<\/code> or <code>AttributeError<\/code> failures in production.<\/li>\n\n\n\n<li><strong>Long-Term Governance:<\/strong> Java&#8217;s explicit interfaces and modular package structures enforce clean architecture boundaries, ensuring that AI components remain testable and decoupled from underlying model providers.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4. Production Readiness: Observability, Security, and Compliance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deploying an AI feature to production requires strict compliance, monitoring, and security controls\u2014areas where Java and Spring Boot excel out of the box.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Observability with Spring Actuator &amp; Micrometer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Spring AI natively integrates with <strong>Micrometer<\/strong> and <strong>Spring Boot Actuator<\/strong>, providing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Token Usage Metrics:<\/strong> Automatic tracking of prompt tokens, completion tokens, and estimated costs per endpoint or user session.<\/li>\n\n\n\n<li><strong>Distributed Tracing:<\/strong> Seamless integration with OpenTelemetry, Zipkin, or Jaeger to trace latency through vector databases, embedding models, and chat completions.<\/li>\n\n\n\n<li><strong>Health Checks:<\/strong> Native endpoints to monitor vector database connectivity and LLM provider availability.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Enterprise Security<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python package repositories (PyPI) have historically faced heightened security scrutiny around dependency typosquatting and unvetted third-party libraries. Java\u2019s Maven and Gradle ecosystems offer mature, automated enterprise scanning tools (Snyk, SonarQube, Dependency-Check) and strict dependency governance, making enterprise security compliance significantly easier to pass.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Unified Abstractions without Vendor Lock-In<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring AI brings the battle-tested design patterns of the Spring Framework to artificial intelligence:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Portable Model API:<\/strong> Switch between OpenAI, Azure OpenAI, AWS Bedrock, Anthropic Claude, Google Vertex AI, or local models (via Ollama) by simply changing configuration properties (<code>application.yaml<\/code>) without rewriting your core application logic.<\/li>\n\n\n\n<li><strong>Standardized RAG Framework:<\/strong> Unified abstractions for <code>DocumentReader<\/code>, <code>DocumentTransformer<\/code>, <code>VectorStore<\/code> (supporting PGVector, Pinecone, Milvus, Redis, Qdrant, and more), and <code>Advisor<\/code> chains for contextual memory and safety guardrails.<\/li>\n\n\n\n<li><strong>Function Calling as Spring Beans:<\/strong> Expose ordinary Java methods\/beans as tools to LLM agents using simple annotations and type declarations.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Comparison Summary: Python vs. Java + Spring AI for Enterprise AI<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Criterion<\/strong><\/td><td><strong>Python (LangChain \/ LlamaIndex)<\/strong><\/td><td><strong>Java + Spring AI<\/strong><\/td><\/tr><tr><td><strong>Best For<\/strong><\/td><td>Rapid prototyping, data science, research<\/td><td>Enterprise production, microservices, scaling<\/td><\/tr><tr><td><strong>Concurrency Model<\/strong><\/td><td>AsyncIO \/ Event Loops<\/td><td>Virtual Threads (Project Loom)<\/td><\/tr><tr><td><strong>Type Safety<\/strong><\/td><td>Optional (Type hints)<\/td><td>Enforced at compile time<\/td><\/tr><tr><td><strong>Observability<\/strong><\/td><td>Varies (LangSmith, Third-party plugins)<\/td><td>Native (Micrometer, Actuator, OpenTelemetry)<\/td><\/tr><tr><td><strong>Ecosystem Integration<\/strong><\/td><td>High glue code needed for Java backends<\/td><td>Direct, native integration into Spring Boot apps<\/td><\/tr><tr><td><strong>Refactoring &amp; Refinement<\/strong><\/td><td>Error-prone in large teams<\/td><td>Safe and automated via mature IDEs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Python will always be the premier language for AI researchers and data scientists inventing new model architectures. However, for software engineers and enterprise architects tasked with delivering reliable, secure, high-throughput AI features into production, <strong>Java with Spring AI<\/strong> offers a far more robust foundation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By combining the battle-tested reliability, performance, and security of the JVM with the modern developer experience of Spring AI, enterprises can scale their AI applications without sacrificing engineering discipline.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While Python remains the undisputed king of AI research, data exploration, and model training, the landscape shifts dramatically when moving from experimental notebooks to high-throughput, mission-critical production systems. For enterprise engineering teams building user-facing applications, workflow automations, and LLM-powered services, the real challenge isn&#8217;t training a model\u2014it&#8217;s integrating, scaling, securing, and maintaining AI capabilities within [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3989,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_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},"jetpack_post_was_ever_published":false},"categories":[495,443],"tags":[429,69,497],"series":[],"class_list":["post-3987","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-spring_ai","tag-ai","tag-java-2","tag-spring-ai"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_rht72frht72frht7-scaled.avif","jetpack-related-posts":[{"id":3951,"url":"https:\/\/www.mymiller.name\/wordpress\/java\/scaling-streams-mastering-virtual-threads-in-spring-boot-4-and-java-25\/","url_meta":{"origin":3987,"position":0},"title":"Scaling Streams: Mastering Virtual Threads in Spring Boot 4 and Java 25","author":"Jeffery Miller","date":"April 20, 2026","format":false,"excerpt":"As a software architect, I\u2019ve seen the industry shift from heavy platform threads to reactive streams, and finally to the \"best of both worlds\": Virtual Threads. With the recent release of Spring Boot 4.0 and Java 25 (LTS), Project Loom's innovations have officially become the bedrock of high-concurrency enterprise Java.\u2026","rel":"","context":"In &quot;JAVA&quot;","block_context":{"text":"JAVA","link":"https:\/\/www.mymiller.name\/wordpress\/category\/java\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_wqijejwqijejwqij-scaled.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_wqijejwqijejwqij-scaled.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_wqijejwqijejwqij-scaled.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_wqijejwqijejwqij-scaled.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_wqijejwqijejwqij-scaled.avif 3x"},"classes":[]},{"id":3965,"url":"https:\/\/www.mymiller.name\/wordpress\/angular\/bringing-worlds-to-life-integrating-ai-personas-in-multi-user-dungeons-muds\/","url_meta":{"origin":3987,"position":1},"title":"Bringing Worlds to Life: Integrating AI Personas in Multi-User Dungeons (MUDs)","author":"Jeffery Miller","date":"April 20, 2026","format":false,"excerpt":"A few weeks ago, I found myself pondering the ultimate objective for an artificial intelligence system. The answer kept returning to a single concept: the ability to truly mimic a human. This spark of an idea gave rise to a challenge\u2014I needed a sandbox where I could work with AI\u2026","rel":"","context":"In &quot;Angular&quot;","block_context":{"text":"Angular","link":"https:\/\/www.mymiller.name\/wordpress\/category\/angular\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_hsr3ethsr3ethsr3-scaled.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_hsr3ethsr3ethsr3-scaled.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_hsr3ethsr3ethsr3-scaled.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_hsr3ethsr3ethsr3-scaled.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_hsr3ethsr3ethsr3-scaled.avif 3x"},"classes":[]},{"id":3991,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_ai\/integrating-model-context-protocol-mcp-tooling-with-spring-ai\/","url_meta":{"origin":3987,"position":2},"title":"Integrating Model Context Protocol (MCP) Tooling with Spring AI","author":"Jeffery Miller","date":"July 24, 2026","format":false,"excerpt":"The Model Context Protocol (MCP), originally introduced by Anthropic, is an open standard designed to standardize how Large Language Models (LLMs) connect with external context sources\u2014such as databases, local file systems, third-party APIs, and custom enterprise logic. By integrating MCP support into Spring AI, Java developers can decouple tool execution\u2026","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/www.mymiller.name\/wordpress\/category\/ai\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_g6ak5ug6ak5ug6ak-scaled.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_g6ak5ug6ak5ug6ak-scaled.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_g6ak5ug6ak5ug6ak-scaled.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_g6ak5ug6ak5ug6ak-scaled.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_g6ak5ug6ak5ug6ak-scaled.avif 3x"},"classes":[]},{"id":3931,"url":"https:\/\/www.mymiller.name\/wordpress\/uncategorized\/advanced-spring-ai-creating-agentic-workflows-with-function-calling\/","url_meta":{"origin":3987,"position":3},"title":"Advanced Spring AI: Creating Agentic Workflows with Function Calling","author":"Jeffery Miller","date":"November 24, 2025","format":false,"excerpt":"The landscape of AI is rapidly evolving, moving beyond simple request-response models to more sophisticated, agentic systems. These systems empower Large Language Models (LLMs) to not just generate text, but to act within your applications, making them an active and integral part of your business logic. Spring AI is at\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_kg5i0ykg5i0ykg5i.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_kg5i0ykg5i0ykg5i.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_kg5i0ykg5i0ykg5i.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/Gemini_Generated_Image_kg5i0ykg5i0ykg5i.avif 2x"},"classes":[]},{"id":3557,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_ai\/spring-ai-simplifying-ai-development\/","url_meta":{"origin":3987,"position":4},"title":"Spring AI: Simplifying AI Development","author":"Jeffery Miller","date":"April 20, 2026","format":false,"excerpt":"Spring AI is a new framework aimed at making AI development easier for Java developers. It provides a simple, Spring-friendly way to integrate AI models into your applications, including the use of templates for more structured prompts. It currently supports models from various providers. Why Spring AI? Simplified Integration: Easily\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:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8686301_640.jpg?fit=640%2C640&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8686301_640.jpg?fit=640%2C640&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8686301_640.jpg?fit=640%2C640&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3574,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_ai\/deeplearning4j-and-spring-boot-a-powerful-duo-for-ai-powered-applications\/","url_meta":{"origin":3987,"position":5},"title":"Deeplearning4J and Spring Boot: A Powerful Duo for AI-Powered Applications","author":"Jeffery Miller","date":"April 20, 2026","format":false,"excerpt":"Deeplearning4J (DL4J) offers a comprehensive Java framework for deep learning, while Spring Boot streamlines the development of production-ready applications. By combining these two technologies, you unlock a flexible platform for building intelligent services that can handle various types of data. In this guide, we\u2019ll explore how to integrate DL4J into\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:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8453379_1280.jpg?fit=800%2C1200&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8453379_1280.jpg?fit=800%2C1200&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8453379_1280.jpg?fit=800%2C1200&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/04\/ai-generated-8453379_1280.jpg?fit=800%2C1200&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3987","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=3987"}],"version-history":[{"count":1,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3987\/revisions"}],"predecessor-version":[{"id":3990,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/3987\/revisions\/3990"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media\/3989"}],"wp:attachment":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media?parent=3987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/categories?post=3987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/tags?post=3987"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/series?post=3987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}