{"id":1326,"date":"2019-09-11T10:45:47","date_gmt":"2019-09-11T08:45:47","guid":{"rendered":"https:\/\/bluemind.purpl-web.com\/?p=1326"},"modified":"2019-10-17T08:19:43","modified_gmt":"2019-10-17T06:19:43","slug":"bluemind-core-innovative-architecture","status":"publish","type":"post","link":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/","title":{"rendered":"BlueMind Core, an innovative architecture that adapts to all uses"},"content":{"rendered":"\n<p>One of the key objectives of our R&amp;D on the BlueMind solution is to design <strong>a modern architecture capable of meeting the demands of all client types<\/strong>. Specifically, this means:<\/p>\n<ul>\n<li>Designing a <strong>scalable<\/strong> <strong>architecture <\/strong>that meets the needs of organisations of all sizes \u2013 from just a few users to thousands of them,<\/li>\n<li>Ensuring <strong>optimum<\/strong> <strong>performance <\/strong>through architecture improvements aimed at <strong>providing efficient use while keeping resource consumption controlled, <\/strong><\/li>\n<li>Offering <strong>extension<\/strong> <strong>points <\/strong>to make enhancing the BlueMind&nbsp;solution easier <strong>through plugins&nbsp;without the need for complex developments<\/strong>,<\/li>\n<li>Exposing all BlueMind features through an API so that all BlueMind applications\u2019 actions pass through the specified&nbsp;<strong>API endpoints<\/strong><\/li>\n<\/ul>\n<p>This article describes the <strong>architecture of BlueMind Core <\/strong>with an <strong>overview of available APIs<\/strong> (<a href=\"https:\/\/forge.bluemind.net\/confluence\/display\/BM35\/API+BlueMind\">please refer to BlueMind\u2019s documentation about API<\/a>s&nbsp;and&nbsp;<a href=\"https:\/\/forge.bluemind.net\/apidoc\/\">BlueMind Docs<\/a>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>DESCRIPTION of CORE V2\u2019s architecture<\/strong><\/h2>\n\n\n\n<p>BlueMind\u2019s 2nd generation Core is a Java program. It exposes\nweb services representing BlueMind\u2019s API.&nbsp;It runs scheduled tasks (back-ups,\nre-indexing, directory synching, reporting).<br>\nCore is the only component that handles the data from PostgreSQL databases. All\nother components pass through it to read and edit information. It receives http\nrequests on the 8090 port and returns responses in json format. <\/p>\n\n\n\n<p>Http methods are used to indicate the type of\noperations to be performed:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>GET <\/strong>(retrieve),<\/li><li><strong>POST <\/strong>(update),<\/li><li><strong>PUT <\/strong>(create),<\/li><li><strong>DELETE<\/strong>.<\/li><\/ul>\n\n\n\n<p>\n\n\n\n\n\n\n\nThese web services are commonly called RESTful.\n\n\n\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>TECHNOLOGIES USED<\/strong><\/h2>\n\n\n\n<p>The Core&nbsp;relies on several technologies:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Vert.x<\/strong><\/li><\/ul>\n\n\n\n<p><em>License<\/em>: open source, Apache software\n2.0 license<\/p>\n\n\n\n<p><em>Website:<\/em>&nbsp;<a href=\"http:\/\/vertx.io\/\">http:\/\/vertx.io<\/a><\/p>\n\n\n\n<p>Vert.x is a reactive application framework that transforms network requests into events that can be subscribed to and therefore reacted to. <\/p>\n\n\n\n<p>Based on the netty network library, it relies on non-blocking I\/O for increased scalability and more efficiency on multi-core CPUs. This type of architecture means that just a few threads (typically twice the number of server cores) are capable of supporting a large number of network connections.&nbsp; <\/p>\n\n\n\n<p>A distributed message bus facilitates communication between application components while keeping components with different roles separate within the application. Application components declare addresses on the bus they know how to respond to. As the bus is distributed, the response to a message may come from another vert.x instance on another server. This enables high availability as well as load balancing as cores are dynamically added to the network when needed. The javascript code in the browser starts a websocket connection with the core. The server is then able to start a dialog. This capability is for instance used to notify users\u2019 browsers immediately when a new email arrives and therefore avoids costly periodic checks. <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Jackson<\/strong><\/li><\/ul>\n\n\n\n<p><em>License<\/em>: Apache 2.0 License<\/p>\n\n\n\n<p><em>Website<\/em>:&nbsp;<a href=\"https:\/\/github.com\/FasterXML\/jackson\">https:\/\/github.com\/FasterXML\/jackson<\/a><\/p>\n\n\n\n<p>The core, databind and annotation modules are used to transform Java objects into json objects and vice versa. <\/p>\n\n\n\n<p>Having annotations on interfaces or objects avoids having to implement clients method by method: everything is managed automatically on-the-go using java.lang.reflect.Proxy objects (see HttpClientFactory). Interfaces are available in synchronous and asynchronous versions.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>OSGi \/ Eclipse Runtime<\/strong><\/li><\/ul>\n\n\n\n<p><em>License<\/em>: open source, eclipse<\/p>\n\n\n\n<p>Eclipse IDE technologies are used for dependency injection and plugin creation. Components declare extension points using a schema (.exds files) referenced in a plugin.xml file. Components connect and implement extensions using a plugin.xml file. One component may simultaneously declare extension points and become extensible while extending other extension points. <\/p>\n\n\n\n<h1><strong>CONTAINERS AND ITEMS<\/strong><\/h1>\n\n\n\n<p>To understand core APIs, we need to explain the\nnotions of Containers and Items.<\/p>\n\n\n\n<p>Core is built around a set of containers with a UID\n(unique identifier) and a type. Containers contain items. Items also have a\nunique identifier within their container. <\/p>\n\n\n\n<p><strong>Examples<\/strong><\/p>\n\n\n\n<p>Container<em>:<\/em><\/p>\n\n\n\n<p>UID:&nbsp;<em>abcd-1234-5678-afef<\/em>&nbsp;Type:&nbsp;<em>installation<\/em><\/p>\n\n\n\n<p>This installation type container whose UID is\ngenerated on the BlueMind installation contains server type items. <\/p>\n\n\n\n<p>Container<em>:<\/em><\/p>\n\n\n\n<p>UID: bluemind.net Type: domain<\/p>\n\n\n\n<p>A domain type container is created when a domain is\nadded to a BlueMind installation. <\/p>\n\n\n\n<p>Container:<\/p>\n\n\n\n<p>UID: users_bluemind.net Type: users<\/p>\n\n\n\n<p>A users type container is created when a domain is\ncreated and contains the users of the domain bluemind.net.<\/p>\n\n\n\n<p>Container:<\/p>\n\n\n\n<p>UID: addressbook_bluemind.net Type: addressbook<\/p>\n\n\n\n<p>This container contains vCard type items representing\nusers\u2019 and groups\u2019 contact information. <\/p>\n\n\n\n<p><strong>Generic Features<\/strong><\/p>\n\n\n\n<p>Using these generic containers enables <strong>reusable cross-application features<\/strong>, the three main ones being: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Rights management<\/strong> and ACLs which\nwill be positioned on the containers<\/li><li><strong>Automatic maintenance<\/strong> of change\nhistory, of a version number on the container and of a version on the item<\/li><li><strong>Subscription management<\/strong> (you subscribe\nto the container \u201crichard_calendar\u201d so that it is always shown in your UI)<\/li><\/ul>\n\n\n\n<p>Generic items will carry the values all objects would\nusually carry: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Last edit date, creation date<\/li><li>The user\u2019s UID used for the last edit, UID used on creation<\/li><li>Version<\/li><li>External ID (especially useful during a migration process to save the object\u2019s ID in the source folder and know that this object is imported)<\/li><\/ul>\n\n\n\n<p><strong>Synchronisation au niveau des containers<\/strong><\/p>\n\n\n\n<p>Most BlueMind APIs are used specifying the container to be acted on. When a container is created, a database sequence is created to maintain version numbers within the container.&nbsp; <\/p>\n\n\n\n<p>A ChangeLog table is automatically populated each time an item is created, updated or deleted. <\/p>\n\n\n\n<p>This makes generic synching mechanisms particularly efficient as communication with the server is limited to exchanging version number and modification types. Depending on the version number gap between the client and the server, the client is able to request changes and data (section by section or all at once depending on the amount of data). <\/p>\n\n\n\n<p>The synching code is therefore implemented once and not repeated: the process is exactly the same for events, contacts or any type of data whose changes are tracked. <\/p>\n\n\n\n<p>It is located in <strong>ContainerStoreService<\/strong>, via the changelog() and changeset() methods.<\/p>\n\n\n\n<p><strong>SecurityContext and rights management<\/strong><\/p>\n\n\n\n<p>During authentication, a SecurityContext is created and a session ID is allocated. This object registers the session ID, users\u2019 UIDs as well as the groups users are a member of. <\/p>\n\n\n\n<p>The Session ID is included with every API request as an X-Bm-ApiKey header.<\/p>\n\n\n\n<h1><strong>What next?<\/strong><\/h1>\n\n\n\n<p>This complete architecture overhaul has kept our R&amp;D team busy for months, which is why our version 3.5 was such a long time coming. But thanks to this work, we\u2019ve achieved a robust, scalable architecture that meets three crucial goals:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Elastic infrastructures<\/strong> that can accommodate load increases &#8212; from tens of users to hundreds of thousands of them<\/li><li><strong>Load balancing and service redundancy<\/strong> capability <\/li><li>The <strong>ability to replace relational databases by noSQL databases and file structures better adapted to Cloud solutions<\/strong>. <\/li><\/ul>\n\n\n\n<p>To find out more, read our <a href=\"https:\/\/bluemind.purpl-web.com\/fr\/devops-et-integration-continue-chez-bluemind\/\">article on <strong>continuous integration<\/strong><\/a>&nbsp;at BlueMind. You can also&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=z1If3WIQhpc&amp;list=PLJj7-LyvGRsKlxYSXQSNvKIPXQRqpqqi9&amp;index=7&amp;t=5s\"><strong>watch our Quality Manager\u2019s talk<\/strong><\/a>&nbsp;about BlueMind\u2019s production process.<\/p>\n\n\n\n<p>And, you\u2019re welcome to <a href=\"https:\/\/www.bluemind.net\/actualites\/evenements\/\">join us <\/a>at&nbsp;<a href=\"https:\/\/2019.libday.fr\/\">Libday<\/a>&nbsp;for&nbsp;<a href=\"https:\/\/2019.devops-dday.com\/\">DevOps D-day<\/a>&nbsp;in Marseille on 14th November 2019 and listen to our talk entitled:&nbsp;<strong><em>\u201cDevOps and agility: diving into BlueMind\u2019s production works\u201d.<\/em><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>DESCRIPTION of CORE V2\u2019s architecture BlueMind\u2019s 2nd generation Core is a Java program. It exposes web services representing BlueMind\u2019s API.&nbsp;It runs scheduled tasks (back-ups, re-indexing, directory synching, reporting). Core is the only component that handles the data from PostgreSQL databases. All other components pass through it to read and edit information. It receives http requests [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":1316,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[183],"tags":[],"class_list":["post-1326","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>BlueMind Core, an innovative architecture that adapts to all uses<\/title>\n<meta name=\"description\" content=\"Learn how our R&amp;D team has achieved a robust, scalable architecture, capable of meeting the demands of all client types from just a few users to thousands.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"BlueMind Core, an innovative architecture that adapts to all uses\" \/>\n<meta property=\"og:description\" content=\"Learn how our R&amp;D team has achieved a robust, scalable architecture, capable of meeting the demands of all client types from just a few users to thousands.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\" \/>\n<meta property=\"og:site_name\" content=\"Bluemind\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-11T08:45:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-17T06:19:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png\" \/>\n\t<meta property=\"og:image:width\" content=\"661\" \/>\n\t<meta property=\"og:image:height\" content=\"462\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"BlueMind Core, an innovative architecture that adapts to all uses\",\"datePublished\":\"2019-09-11T08:45:47+00:00\",\"dateModified\":\"2019-10-17T06:19:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\"},\"wordCount\":1172,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png\",\"articleSection\":[\"Technical\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\",\"url\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\",\"name\":\"BlueMind Core, an innovative architecture that adapts to all uses\",\"isPartOf\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png\",\"datePublished\":\"2019-09-11T08:45:47+00:00\",\"dateModified\":\"2019-10-17T06:19:43+00:00\",\"description\":\"Learn how our R&D team has achieved a robust, scalable architecture, capable of meeting the demands of all client types from just a few users to thousands.\",\"breadcrumb\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage\",\"url\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png\",\"contentUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png\",\"width\":\"661\",\"height\":\"462\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bluemind.purpl-web.com\/en\/homepage\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"BlueMind Core, an innovative architecture that adapts to all uses\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#website\",\"url\":\"https:\/\/bluemind.purpl-web.com\/en\/\",\"name\":\"Bluemind\",\"description\":\"Collaborative messaging\",\"publisher\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bluemind.purpl-web.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#organization\",\"name\":\"BlueMind\",\"url\":\"https:\/\/bluemind.purpl-web.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png\",\"contentUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png\",\"width\":300,\"height\":100,\"caption\":\"BlueMind\"},\"image\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"BlueMind Core, an innovative architecture that adapts to all uses","description":"Learn how our R&D team has achieved a robust, scalable architecture, capable of meeting the demands of all client types from just a few users to thousands.","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:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/","og_locale":"en_US","og_type":"article","og_title":"BlueMind Core, an innovative architecture that adapts to all uses","og_description":"Learn how our R&D team has achieved a robust, scalable architecture, capable of meeting the demands of all client types from just a few users to thousands.","og_url":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/","og_site_name":"Bluemind","article_published_time":"2019-09-11T08:45:47+00:00","article_modified_time":"2019-10-17T06:19:43+00:00","og_image":[{"width":661,"height":462,"url":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#article","isPartOf":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/"},"author":{"name":"","@id":""},"headline":"BlueMind Core, an innovative architecture that adapts to all uses","datePublished":"2019-09-11T08:45:47+00:00","dateModified":"2019-10-17T06:19:43+00:00","mainEntityOfPage":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/"},"wordCount":1172,"commentCount":0,"publisher":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#organization"},"image":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png","articleSection":["Technical"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/","url":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/","name":"BlueMind Core, an innovative architecture that adapts to all uses","isPartOf":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage"},"image":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png","datePublished":"2019-09-11T08:45:47+00:00","dateModified":"2019-10-17T06:19:43+00:00","description":"Learn how our R&D team has achieved a robust, scalable architecture, capable of meeting the demands of all client types from just a few users to thousands.","breadcrumb":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#primaryimage","url":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png","contentUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2019\/08\/plugins.png","width":"661","height":"462"},{"@type":"BreadcrumbList","@id":"https:\/\/bluemind.purpl-web.com\/en\/bluemind-core-innovative-architecture\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bluemind.purpl-web.com\/en\/homepage\/"},{"@type":"ListItem","position":2,"name":"BlueMind Core, an innovative architecture that adapts to all uses"}]},{"@type":"WebSite","@id":"https:\/\/bluemind.purpl-web.com\/en\/#website","url":"https:\/\/bluemind.purpl-web.com\/en\/","name":"Bluemind","description":"Collaborative messaging","publisher":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bluemind.purpl-web.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/bluemind.purpl-web.com\/en\/#organization","name":"BlueMind","url":"https:\/\/bluemind.purpl-web.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png","contentUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png","width":300,"height":100,"caption":"BlueMind"},"image":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"_links":{"self":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts\/1326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/comments?post=1326"}],"version-history":[{"count":1,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts\/1326\/revisions"}],"predecessor-version":[{"id":1855,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts\/1326\/revisions\/1855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/media\/1316"}],"wp:attachment":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/media?parent=1326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/categories?post=1326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/tags?post=1326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}