{"id":4676,"date":"2018-07-04T08:51:35","date_gmt":"2018-07-04T03:21:35","guid":{"rendered":"https:\/\/www.innovationm.com\/blog\/?p=4676"},"modified":"2018-07-04T08:51:35","modified_gmt":"2018-07-04T03:21:35","slug":"room-persistence-library","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/","title":{"rendered":"Room Persistence Library"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>Last year 2017\u00a0Google announced a more secure and robust architecture to allow smooth database access while harnessing the full power of SQLite called Room\u00a0Library. The Room Persistence library helps your app to create a cache on your device. In this blog, we are going to discuss Room Library and its implementation.<\/p>\n<h3><strong>Persistence in Android?<\/strong><\/h3>\n<p>To persist data in Android different companaies provide various solutions.<br \/>\nBut inside our Android framework we have three things which come with our standard library:<\/p>\n<p>1. ContentProviders<br \/>\n2. SQLite<br \/>\n3. SharedPreferences<\/p>\n<p>But In all above three if we want to store data in a structured form we have to go with SQLiteDatabase. SQLite is something we have been shipping from Android 1 and it is a proven technology works very well but to write a simple query in SQLite it takes a lot of stuff.<br \/>\nTo overcome this Google announced an object mapping library for SQLite called Room.<\/p>\n<h3>What is Room Database?<\/h3>\n<p>Room Library is a new and more smooth way to create the database in your Android app. Room Library eliminates a lot of\u00a0 boilerplate code which we write previously in an implementation of SQLite database in our app. Room Library provides an abstraction layer over SQLiteDatabase and helps us to create a cache of our app&#8217;s data on a device that&#8217;s running our app. Room is ORM between Java classes\u00a0and SQLite.In Room, we cannot have complex nesting of objects like other ORM solutions provide.<\/p>\n<h4>Room majorly provides three components:<\/h4>\n<p>1. Database:<\/p>\n<p>It contains the database holder and acts as the main access point for our app&#8217;s persisted data. our database class must be annotated with @Database and must satisfy some conditions:<\/p>\n<ul>\n<li>\u00a0Database class must extend RoomDatabase.<\/li>\n<li>\u00a0Database class must contain the list of entities associated with the database within the annotation.<\/li>\n<li>\u00a0Database class must have an abstract method that has zero arguments and returns the class that is annotated with @Dao.<\/li>\n<\/ul>\n<p>At runtime, we can acquire an instance of Database by calling Room.databaseBuilder() or Room.inMemoryDatabaseBuilder().<\/p>\n<p>2. Entity: It represents a table within the database.<\/p>\n<p>3. DAO:\u00a0It contains the methods used for accessing the database.<\/p>\n<h4><strong>Get Started with Room implementation\u00a0<\/strong><\/h4>\n<p>1. Create a new project with a default empty activity in Android Studio.<\/p>\n<p>2. Add google Maven Repository to top-level build.gradle.<\/p>\n<pre class=\"\">allprojects\r\n{\r\n  repositories\r\n  {\r\n   google()\r\n   jcenter() \r\n  }\r\n}<\/pre>\n<p>3.\u00a0 Add the following code in build.gradle (app level) inside dependency block.<\/p>\n<pre class=\"\">def room_version = \"1.1.0\" \/\/ or, for latest rc, use \"1.1.1-rc1\"\r\nimplementation \"android.arch.persistence.room:runtime:$room_version\"\r\nannotationProcessor \"android.arch.persistence.room:compiler:$room_version\"\r\n\r\n\/\/ optional - RxJava support for Room\r\nimplementation \"android.arch.persistence.room:rxjava2:$room_version\"\r\n\r\n\/\/ optional - Guava support for Room, including Optional and ListenableFuture\r\nimplementation \"android.arch.persistence.room:guava:$room_version\"\r\n\r\n\/\/ Test helpers\r\ntestImplementation \"android.arch.persistence.room:testing:$room_version\"<\/pre>\n<p>&nbsp;<\/p>\n<p>4.\u00a0 Create an Entity.<\/p>\n<p>We are creating an entity called Employee .Employee is a table which is used to store data. To make our Employee class familiar to RoomDatabase, we need to annotate it with<br \/>\n<strong>@Entity<\/strong> annotation. Annotations identify how each part of this class relates to an entry in the database.<\/p>\n<p>Room uses the following information to generate code.<\/p>\n<p><strong>@Entity(tableName = &#8220;EMPLOYEE_TABLE&#8221;)<\/strong><br \/>\nEvery @Entity class must represent an entity. Here our table name is different from our entity class, so define it like above line.<\/p>\n<p><strong>@PrimaryKey<\/strong><br \/>\nThis annotation used to make primary key because every entity needs a primary key.<\/p>\n<p><strong>@NonNull<\/strong><br \/>\nThis annotation defines that a parameter, field, or method never return a null value.<\/p>\n<p><strong>@ColumnInfo(name = Id_Proof)<\/strong><br \/>\nThis annotation specifies the name of the column in the database if we want our column name must be different from member variable.<\/p>\n<pre class=\"\">@Entity(tableName = \"Employee_Table\")\r\npublic class Emplyee\r\n{\r\n    @PrimaryKey(autoGenerate = true)\r\n    private int id;\r\n\r\n    private String name;\r\n\r\n    private long salary;\r\n\r\n    private int age;\r\n\r\n    private String designaion;\r\n\r\n    public Emplyee(int id, String name, long salary, int age, String designaion)\r\n    {\r\n        this.id = id;\r\n        this.name = name;\r\n        this.salary = salary;\r\n        this.age = age;\r\n        this.designaion = designaion;\r\n    }\r\n\r\n    public int getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(int id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public long getSalary() {\r\n        return salary;\r\n    }\r\n\r\n    public void setSalary(long salary) {\r\n        this.salary = salary;\r\n    }\r\n\r\n    public int getAge() {\r\n        return age;\r\n    }\r\n\r\n    public void setAge(int age) {\r\n        this.age = age;\r\n    }\r\n\r\n    public String getDesignaion() {\r\n        return designaion;\r\n    }\r\n\r\n    public void setDesignaion(String designaion) {\r\n        this.designaion = designaion;\r\n    }\r\n}<\/pre>\n<p>5. Create DAO class<\/p>\n<p>DAO means data access object, DAO must be an interface or abstract class and annotate it with <strong>@Dao<\/strong>\u00a0annotation to identify it is a DAO class for Room.<br \/>\nIn DAO we have to specify SQL queries and associate it with method calls.<br \/>\nHere we are creating a DAO class and write some queries to interact with the database.<\/p>\n<p>Implementation of DAO:<\/p>\n<ul>\n<li>Create the new interface and called it EmployeeDao.<\/li>\n<li>Annotate your DAO class with the @Dao annotation to make it familiar with the room.<\/li>\n<li>Annotate your methods with an annotation like @Insert, @Query, @Delete which are used to interact with the database.<\/li>\n<\/ul>\n<pre class=\"\">@Dao\r\npublic interface EmployeeDAO\r\n{\r\n    @Insert\r\n    void insert(Emplyee emp);\r\n\r\n    @Query(\"Delete from Employee_Table\")\r\n    void deleteAllEmployee();\r\n\r\n    @Query(\"Select * from employee_table order by name ASC\")\r\n    List&lt;Emplyee&gt; getEmployeeList();\r\n}<\/pre>\n<p>6. Add a Room database<\/p>\n<p>It is a\u00a0 database abstract layer which works on top of an SQLiteDatabase\u00a0 \u00a0 To interact with database room uses DAO classes which we discussed above.\u00a0 \u00a0 It provides a compile-time check of SQLite statements. Our Database class must extend RoomDatabase. We have to make one instance of Room Database for our whole app.<\/p>\n<p>Implementation Of RoomDatabase:<\/p>\n<ol>\n<li>To create Database class that class must satisfy some following condition:<\/li>\n<\/ol>\n<ul>\n<li>\u00a0Database class must be an abstract public class.<\/li>\n<li>\u00a0Database class must extend RoomDatabase.<\/li>\n<li>\u00a0Database class must be annotated and declare the entities that belong to the database and set the version number. \u00a0 @Database(entities = {Emplyee.class} , version = 1).<\/li>\n<\/ul>\n<p>2.\u00a0Define DAO class that work with database and provides an abstract getter method for each\u00a0 \u00a0 \u00a0 @Dao. i.e.\u00a0 public abstract EmployeeDAO employeeDao();<\/p>\n<p>3.\u00a0Create your database a singleton to avoid the threat of multiple instances opened at the same time.<\/p>\n<pre class=\"\">@Database(entities = Emplyee.class, version = 1)\r\nabstract class EmployeeDatabase extends RoomDatabase\r\n{\r\n    public abstract EmployeeDAO employeeDAO();\r\n\r\n    private static EmployeeDatabase databaseInstance;\r\n\r\n    static EmployeeDatabase getDatabase(final Context context)\r\n    {\r\n        if (databaseInstance == null)\r\n        {\r\n            synchronized (EmployeeDatabase.class)\r\n            {\r\n                if (databaseInstance == null)\r\n                {\r\n                    databaseInstance = Room.databaseBuilder(context.getApplicationContext() , EmployeeDatabase.class , \"Employee_Database\").build();\r\n                }\r\n            }\r\n        }\r\n        return databaseInstance;\r\n    }\r\n\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Last year 2017\u00a0Google announced a more secure and robust architecture to allow smooth database access while harnessing the full power of SQLite called Room\u00a0Library. The Room Persistence library helps your app to create a cache on your device. In this blog, we are going to discuss Room Library and its implementation. Persistence in Android? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4851,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,71],"tags":[283],"class_list":["post-4676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-mobile","tag-room-library"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Room Persistence Library - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Room Persistence Library - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Last year 2017\u00a0Google announced a more secure and robust architecture to allow smooth database access while harnessing the full power of SQLite called Room\u00a0Library. The Room Persistence library helps your app to create a cache on your device. In this blog, we are going to discuss Room Library and its implementation. Persistence in Android? [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-04T03:21:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/07\/room-persistent-library_InnovationM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"805\" \/>\n\t<meta property=\"og:image:height\" content=\"417\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\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\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"Room Persistence Library\",\"datePublished\":\"2018-07-04T03:21:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/\"},\"wordCount\":790,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/07\\\/room-persistent-library_InnovationM.png\",\"keywords\":[\"room library\"],\"articleSection\":[\"Android\",\"Mobile\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/\",\"name\":\"Room Persistence Library - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/07\\\/room-persistent-library_InnovationM.png\",\"datePublished\":\"2018-07-04T03:21:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/07\\\/room-persistent-library_InnovationM.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/07\\\/room-persistent-library_InnovationM.png\",\"width\":805,\"height\":417},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/room-persistence-library\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Room Persistence Library\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Room Persistence Library - InnovationM - Blog","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:\/\/www.innovationm.com\/blog\/room-persistence-library\/","og_locale":"en_US","og_type":"article","og_title":"Room Persistence Library - InnovationM - Blog","og_description":"&nbsp; Last year 2017\u00a0Google announced a more secure and robust architecture to allow smooth database access while harnessing the full power of SQLite called Room\u00a0Library. The Room Persistence library helps your app to create a cache on your device. In this blog, we are going to discuss Room Library and its implementation. Persistence in Android? [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/","og_site_name":"InnovationM - Blog","article_published_time":"2018-07-04T03:21:35+00:00","og_image":[{"width":805,"height":417,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/07\/room-persistent-library_InnovationM.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"Room Persistence Library","datePublished":"2018-07-04T03:21:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/"},"wordCount":790,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/07\/room-persistent-library_InnovationM.png","keywords":["room library"],"articleSection":["Android","Mobile"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/","url":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/","name":"Room Persistence Library - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/07\/room-persistent-library_InnovationM.png","datePublished":"2018-07-04T03:21:35+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/room-persistence-library\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/07\/room-persistent-library_InnovationM.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/07\/room-persistent-library_InnovationM.png","width":805,"height":417},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/room-persistence-library\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Room Persistence Library"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/4676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=4676"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/4676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/4851"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=4676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=4676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=4676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}