{"id":28410,"date":"2021-06-29T09:33:15","date_gmt":"2021-06-29T09:33:15","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=28410"},"modified":"2021-09-01T09:30:54","modified_gmt":"2021-09-01T09:30:54","slug":"how-to-perform-basic-crud-operations-using-offline-web-api-in-mobile-clients","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2021\/06\/how-to-perform-basic-crud-operations-using-offline-web-api-in-mobile-clients\/","title":{"rendered":"How to Perform Basic CRUD Operations using Offline Web API in Mobile Clients"},"content":{"rendered":"<h2><a href=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/Tech-img.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-28421\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/Tech-img.jpg\" alt=\"Dynamics 356\" width=\"700\" height=\"400\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/Tech-img.jpg 700w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/Tech-img-300x171.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/Tech-img-660x377.jpg 660w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/a><\/h2>\n<h2 style=\"text-align: justify;\"><strong>Introduction<\/strong><\/h2>\n<p style=\"text-align: justify;\"><strong>Microsoft<\/strong> has provided <strong>offline<\/strong> ability to use \u201cDynamics 365 for phones app\u201d or \u201cField Service (Dynamics 365) App\u201d. Mobile Offline allows users to work with the data in offline mode as well i.e. when they are not connected to the internet. So, in the offline mode, if we want to create or manage the data programmatically, we need to use Microsoft Dynamics Offline Web API methods within the script.<\/p>\n<p style=\"text-align: justify;\">Microsoft Dynamics Offline Web API methods can be used for basic commands while working in offline mode. The basic methods that are available for using the <strong>Xrm.WebApi.offline<\/strong> include the following: createRecord,\u00a0 retrieveRecords, retrieveMultipleRecords, updateRecord and deleteRecord.<\/p>\n<blockquote>\n<p style=\"text-align: left;\"><strong><em>Note:<\/em><\/strong><em> These <strong>OfflineWebApi<\/strong> methods will work only for tables that are enabled for <strong>mobile offline<\/strong> and only basic validation will be performed on the data that is being input. <\/em><\/p>\n<p style=\"text-align: left;\"><em>By using the below method, we can identify whether the entity is available to use in offline mode: <\/em><strong><em>Xrm.WebApi.offline.isAvailableOffline(entityLogicalName);<\/em><\/strong><\/p>\n<\/blockquote>\n<p>In this blog, I will show the sample codes to create, retrieve, update and delete records using <strong>Xrm.WebApi.offline<\/strong> methods in <strong>JavaScript<\/strong>.<\/p>\n<ol style=\"text-align: justify;\">\n<li>\n<h3><strong><u>Create:<\/u><\/strong><\/h3>\n<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">It is used to create table record. The required parameters of this function are;<\/p>\n<ol style=\"text-align: justify;\">\n<li style=\"list-style-type: none;\">\n<ol>\n<li>entityLogicalName \u2013 Logical name of the table.<\/li>\n<li>data \u2013 JSON object of the data to create a new record.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><code>\/\/This function is used to create a contact record<\/code><br \/>\n<code>function createContact() {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 var objContact = null;<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 try {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Create the Json object of contact record<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact = new Object();<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact[\"firstname\"] = \"Jenny\";<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact[\"lastname\"] = \"Smith\";<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Call Create method<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.WebApi.offline.createRecord(\"contact\", objContact).then(function (result) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(\"Contact record has been created successfully.\");<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 function (error) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(error.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 } catch (e) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(e.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 }<\/code><\/p>\n<ol style=\"text-align: justify;\" start=\"2\">\n<li>\n<h3><strong><u>Update<\/u><\/strong><strong>:<\/strong><\/h3>\n<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">It is used to update table record. The required parameters of this function are;<\/p>\n<ol style=\"text-align: justify;\">\n<li style=\"list-style-type: none;\">\n<ol>\n<li>entityLogicalName \u2013 Logical name of the table.<\/li>\n<li>entityId \u2013 GUID of record.<\/li>\n<li>data \u2013 JSON object of the data to update record.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><code>\/\/This function is used to update a contact record<\/code><br \/>\n<code>function updateContact() {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 var objContact = null;<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 try {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Create the Json object of contact record<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact = new Object();<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact[\"telephone1\"] = \"18018015012\";<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact[\"fax\"] = \"123456\";<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 objContact[\"parentcustomerid_account@odata.bind\"] = \"\/accounts(08f4aca2-9793-eb11-b1ac-0022481cb79b)\"<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Call Update method<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.WebApi.offline.updateRecord(\"contact\", \"fb4231a9-dba4-eb11-b1ac-000d3a4e57c1\", objContact).then(function (result) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(\"Contact record has been updated successfully.\");<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 function (error) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(error.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 } catch (e) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(e.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 }<\/code><br \/>\n<code>}<\/code><\/p>\n<ol style=\"text-align: justify;\" start=\"3\">\n<li>\n<h3><strong><u>Delete<\/u><\/strong><strong>:<\/strong><\/h3>\n<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">It is used to delete table record. The required parameters of this function are;<\/p>\n<ol style=\"text-align: justify;\">\n<li style=\"list-style-type: none;\">\n<ol>\n<li>entityLogicalName \u2013 Logical name of the table.<\/li>\n<li>entityId \u2013 GUID of record.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><code>\/\/This function is used to delete a contact record<\/code><br \/>\n<code>function deleteContact() {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 try {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Call Delete method<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.WebApi.offline.deleteRecord(\"contact\", \"5d0111d1-bf05-4079-b695-247e4c9acac2\").then(function (result) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(\"Contact record has been deleted successfully.\");<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 function (error) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(error.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 } catch (e) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(e.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 }<\/code><br \/>\n<code>}<\/code><\/p>\n<ol style=\"text-align: justify;\" start=\"4\">\n<li>\n<h3><strong><u>Retrieve<\/u><\/strong><strong>:<\/strong><\/h3>\n<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">It is used to retrieve a single record from a table. The required parameters of this function are;<\/p>\n<ol style=\"text-align: justify;\">\n<li>entityLogicalName \u2013 Logical name of the table.<\/li>\n<li>entityId &#8211; GUID of record.<\/li>\n<li>options \u2013 OData Query.<\/li>\n<\/ol>\n<p><code>\/\/This function is used to retrieve single contact record<\/code><br \/>\n<code>function retrieveContact() {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 try {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Call Retrieve method<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.WebApi.offline.retrieveRecord(\"contact\", \"fb4231a9-dba4-eb11-b1ac-000d3a4e57c1\", \"?$select=firstname,lastname,telephone1\").then(function (result) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(\"Contact retrieved successfully - FirstName: \" + result.firstname + \", LastName: \" + result.lastname + \" and Telephone: \" + result.telephone1);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 function (error) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(error.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 } catch (e) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(e.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 }<\/code><\/p>\n<ol style=\"text-align: justify;\" start=\"5\">\n<li>\n<h3><strong><u>RetrieveMultiple<\/u><\/strong><strong>:<\/strong><\/h3>\n<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">It is used to retrieve multiple records from the table. The required parameters of this function are;<\/p>\n<ol style=\"text-align: justify;\">\n<li>entityLogicalName \u2013 Logical name of the table.<\/li>\n<li>options \u2013 we can use OData Query and FetchXML as well.<\/li>\n<\/ol>\n<h4 style=\"text-align: justify;\"><strong>RetrieveMultiple method with OData Query<\/strong> \u2013<\/h4>\n<p><code>\/\/This function is used to retrieve contact records using OData Query<\/code><br \/>\n<code>function retrieveContactsWithOdata() {<\/code><br \/>\n<code>\u00a0 \u00a0\u00a0try {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Call Retrieve method<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.WebApi.offline.retrieveMultipleRecords(\"contact\", \"?$select=firstname,lastname,telephone1&amp;$filter=_parentcustomerid_value ne null\").then(function (result) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(\"Length: \" + result.entities.length);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 function (error) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(error.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 } catch (e) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(e.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 }<\/code><br \/>\n<code>}<\/code><\/p>\n<h4 style=\"text-align: justify;\"><strong>RetrieveMultiple method with FetchXML<\/strong> \u2013 To use a FetchXML, use the fetchXml attribute to specify the query.<\/h4>\n<p><code>\/\/This function is used to retrieve contact records using Fetch XML<\/code><br \/>\n<code>function retrieveContactsWithFetch() {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 var fetchXML = null;<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 try {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Fetch XML to retrieve Contact records<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fetchXML = \"&lt;fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;entity name='contact'&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;attribute name='fullname' \/&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;attribute name='telephone1' \/&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;attribute name='contactid' \/&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;order attribute='fullname' descending='false' \/&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;filter type='and'&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;condition attribute='parentcustomerid' operator='not-null' \/&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;\/filter&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;\/entity&gt;\" +<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 \"&lt;\/fetch&gt;\";<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Call Retrieve method<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.WebApi.offline.retrieveMultipleRecords(\"contact\", \"?fetchXml=\" + fetchXML).then(function (result) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(\"Length: \" + result.entities.length);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 function (error) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(error.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 } catch (e) {<\/code><br \/>\n<code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Xrm.Navigation.openAlertDialog(e.message);<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 }<\/code><br \/>\n<code>}<\/code><\/p>\n<h2 style=\"text-align: justify;\"><strong>Conclusion<\/strong><\/h2>\n<p style=\"text-align: justify;\">By using the <strong>Offline Web API<\/strong> methods, we can easily create and manage the table record which is available in the offline database for offline use within mobile clients i.e., \u201cDynamics 365 for phones app\u201d or \u201cField Service (Dynamics 365) App\u201d.<\/p>\n<p><a href=\"https:\/\/www.inogic.com\/product\/integrations\/maplytics-bing-map-microsoft-dynamics-crm\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter wp-image-28413 size-full\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/1-2.jpg\" alt=\"Maplytics\" width=\"800\" height=\"200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/1-2.jpg 800w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/1-2-300x75.jpg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/1-2-768x192.jpg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2021\/06\/1-2-660x165.jpg 660w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Microsoft has provided offline ability to use \u201cDynamics 365 for phones app\u201d or \u201cField Service (Dynamics 365) App\u201d. Mobile Offline allows users to work with the data in offline mode as well i.e. when they are not connected to the internet. So, in the offline mode, if we want to create or manage the\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2021\/06\/how-to-perform-basic-crud-operations-using-offline-web-api-in-mobile-clients\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[65],"tags":[1813],"class_list":["post-28410","post","type-post","status-publish","format-standard","hentry","category-webapi","tag-web-api"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/28410","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=28410"}],"version-history":[{"count":0,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/28410\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=28410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=28410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=28410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}