{"id":37053,"date":"2024-11-01T09:54:25","date_gmt":"2024-11-01T09:54:25","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37053"},"modified":"2024-11-01T11:42:26","modified_gmt":"2024-11-01T11:42:26","slug":"title-kotlin-android-app-development-course-understanding-content-providers","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37053\/","title":{"rendered":"Title: Kotlin Android App Development Course, Understanding Content Providers"},"content":{"rendered":"<p>Content Provider, one of the methods for data storage and management in Android app development, is a powerful tool that allows safe data sharing between applications. In this tutorial, we will take a closer look at the concept of content providers and how to utilize them. Specifically, we will guide you step by step on how to implement a content provider using Kotlin, providing you with foundational knowledge applicable to real app development.<\/p>\n<h2>1. What is a Content Provider?<\/h2>\n<p>A content provider is a data management class in Android designed to safely share data between apps. For example, a contacts app shares contact information with various other apps through a content provider. App developers set up content providers to allow external apps to access data, thereby maintaining data consistency.<\/p>\n<h3>1.1 Key Concepts and Uses<\/h3>\n<p>Content providers are mainly used in the following cases:<\/p>\n<ul>\n<li>Data Sharing Between Apps: Allows different apps to use the same data.<\/li>\n<li>Maintaining Data Consistency: Provides consistent data without directly accessing the database.<\/li>\n<li>Security: Enhances the security of user data by setting access permissions.<\/li>\n<\/ul>\n<h2>2. Structure of a Content Provider<\/h2>\n<p>A content provider consists of three main components:<\/p>\n<ul>\n<li><strong>URI (Uniform Resource Identifier)<\/strong>: Specifies the address of the data that can be accessed by the content provider.<\/li>\n<li><strong>Content Resolver<\/strong>: Provides an interface for CRUD (Create, Read, Update, Delete) operations on the content provider.<\/li>\n<li><strong>Content Observer<\/strong>: Used to detect data changes and update the UI.<\/li>\n<\/ul>\n<h3>2.1 URI<\/h3>\n<p>A URI is a string that identifies a specific data item or data set and is generally structured as follows:<\/p>\n<pre><code>content:\/\/authority\/path\/id<\/code><\/pre>\n<p>Here, <code>authority<\/code> is the name of the content provider, <code>path<\/code> indicates the type of data, and <code>id<\/code> identifies a specific item.<\/p>\n<h3>2.2 Content Resolver<\/h3>\n<p>The Content Resolver is a class that enables an app to communicate with the content provider. It allows operations such as requesting or modifying data.<\/p>\n<h3>2.3 Content Observer<\/h3>\n<p>The Content Observer provides callbacks to detect data changes, helping the app respond immediately to data changes.<\/p>\n<h2>3. Implementing a Content Provider<\/h2>\n<p>In this section, we will explain the process of implementing a content provider using Kotlin step by step.<\/p>\n<h3>3.1 Creating a New Android Project<\/h3>\n<p>First, create a new Android project. Select the &#8216;Empty Activity&#8217; template and set Kotlin as the default language.<\/p>\n<h3>3.2 Setting Up the Gradle File<\/h3>\n<p>Add the necessary dependencies to the project&#8217;s build.gradle file. For example, you might include the RecyclerView and Room libraries:<\/p>\n<pre><code>dependencies {\n    implementation \"androidx.recyclerview:recyclerview:1.2.1\"\n    implementation \"androidx.room:room-ktx:2.4.0\"\n}\n<\/code><\/pre>\n<h3>3.3 Creating the Database Class<\/h3>\n<p>Use Room to create an SQLite database. First, let&#8217;s create a data class.<\/p>\n<pre><code>import androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = \"contacts\")\ndata class Contact(\n    @PrimaryKey(autoGenerate = true) val id: Long, \n    val name: String, \n    val phone: String\n)\n<\/code><\/pre>\n<p>Next, create a DAO (Data Access Object) to define CRUD operations:<\/p>\n<pre><code>import androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.Query\n\n@Dao\ninterface ContactDao {\n    @Insert\n    suspend fun insert(contact: Contact)\n\n    @Query(\"SELECT * FROM contacts\")\n    suspend fun getAll(): List<Contact>\n}\n<\/code><\/pre>\n<p>Then, also create the database class:<\/p>\n<pre><code>import androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\nimport android.content.Context\n\n@Database(entities = [Contact::class], version = 1)\nabstract class AppDatabase : RoomDatabase() {\n    abstract fun contactDao(): ContactDao\n\n    companion object {\n        @Volatile\n        private var INSTANCE: AppDatabase? = null\n\n        fun getDatabase(context: Context): AppDatabase {\n            return INSTANCE ?: synchronized(this) {\n                val instance = Room.databaseBuilder(\n                    context.applicationContext,\n                    AppDatabase::class.java,\n                    \"app_database\"\n                ).build()\n                INSTANCE = instance\n                instance\n            }\n        }\n    }\n}\n<\/code><\/pre>\n<h3>3.4 Creating the Content Provider Class<\/h3>\n<p>Now let&#8217;s create the content provider class. This class is implemented by inheriting from <code>ContentProvider<\/code>:<\/p>\n<pre><code>import android.content.ContentProvider\nimport android.content.ContentValues\nimport android.database.Cursor\nimport android.net.Uri\n\nclass ContactProvider : ContentProvider() {\n    private lateinit var database: AppDatabase\n\n    override fun onCreate(): Boolean {\n        database = AppDatabase.getDatabase(context!!)\n        return true\n    }\n\n    override fun query(\n        uri: Uri,\n        projection: Array<String>?,\n        selection: String?,\n        selectionArgs: Array<String>?,\n        sortOrder: String?\n    ): Cursor? {\n        \/\/ Add logic to return a Cursor\n    }\n\n    override fun insert(uri: Uri, values: ContentValues?): Uri? {\n        \/\/ Add data insertion logic\n    }\n\n    override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int {\n        \/\/ Add data update logic\n    }\n\n    override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {\n        \/\/ Add data deletion logic\n    }\n\n    override fun getType(uri: Uri): String? {\n        \/\/ Return MIME type\n    }\n}\n<\/code><\/pre>\n<h3>3.5 Manifest Configuration<\/h3>\n<p>Register the content provider in the manifest file:<\/p>\n<pre><code>&lt;provider\n    android:name=\".ContactProvider\"\n    android:authorities=\"com.example.app.provider\"\n    android:exported=\"true\" \/&gt;<\/code><\/pre>\n<h3>3.6 URI Handling<\/h3>\n<p>Add the URI handling logic to each method. For example, the <code>query<\/code> method could be implemented as follows:<\/p>\n<pre><code>override fun query(\n    uri: Uri,\n    projection: Array<String>?,\n    selection: String?,\n    selectionArgs: Array<String>?,\n    sortOrder: String?\n): Cursor? {\n    val cursor = database.contactDao().getAll() \/\/ Returns List<Contact>\n    return cursor\n}\n<\/code><\/pre>\n<h2>4. Using the Content Provider<\/h2>\n<p>Now that the content provider is implemented, let&#8217;s look at how to use it in a real app.<\/p>\n<h3>4.1 Using Content Resolver<\/h3>\n<p>To access the content provider, we use <code>ContentResolver<\/code>. Here is sample code to handle data retrieval, insertion, updating, and deletion:<\/p>\n<pre><code>val resolver = contentResolver\n\n\/\/ Data retrieval\nval cursor = resolver.query(URI_CONTACTS, null, null, null, null)\ncursor?.let {\n    while (it.moveToNext()) {\n        val name = it.getString(it.getColumnIndex(\"name\"))\n        \/\/ Process data\n    }\n}\n\n\/\/ Data insertion\nval values = ContentValues().apply {\n    put(\"name\", \"John Doe\")\n}\nresolver.insert(URI_CONTACTS, values)\n\n\/\/ Data updating\nval updatedValues = ContentValues().apply {\n    put(\"name\", \"Jane Doe\")\n}\nresolver.update(URI_CONTACTS, updatedValues, \"id=?\", arrayOf(\"1\"))\n\n\/\/ Data deletion\nresolver.delete(URI_CONTACTS, \"id=?\", arrayOf(\"1\"))\n<\/code><\/pre>\n<h3>4.2 Connecting UI with Data<\/h3>\n<p>To display data from the content provider in the UI, we can use RecyclerView. We will demonstrate the interaction between the UI and data through the overall structure of this app.<\/p>\n<pre><code>class MainActivity : AppCompatActivity() {\n    private lateinit var adapter: ContactAdapter\n  \n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        recyclerView.layoutManager = LinearLayoutManager(this)\n        adapter = ContactAdapter()\n        recyclerView.adapter = adapter\n\n        loadContacts()\n    }\n\n    private fun loadContacts() {\n        \/\/ Load data from content provider\n    }\n}\n<\/code><\/pre>\n<h2>5. Summary and Conclusion<\/h2>\n<p>In this tutorial, we explored the concept and structure of a content provider, as well as how to implement a content provider using Kotlin. Content providers are very useful tools for sharing data and maintaining consistency. We hope you can utilize this concept for safe and efficient data management when developing various apps.<\/p>\n<h3>5.1 Additional Resources<\/h3>\n<p>We recommend exploring additional materials or reference links related to content providers for deeper learning.<\/p>\n<p>We hope this tutorial has been helpful for your Android app development. In the next tutorial, we will explore asynchronous programming using Kotlin Coroutines. Thank you!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Content Provider, one of the methods for data storage and management in Android app development, is a powerful tool that allows safe data sharing between applications. In this tutorial, we will take a closer look at the concept of content providers and how to utilize them. Specifically, we will guide you step by step on &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37053\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Title: Kotlin Android App Development Course, Understanding Content Providers&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[143],"tags":[],"class_list":["post-37053","post","type-post","status-publish","format-standard","hentry","category-kotlin-android-app-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Title: Kotlin Android App Development Course, Understanding Content Providers - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/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:\/\/atmokpo.com\/w\/37053\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Title: Kotlin Android App Development Course, Understanding Content Providers - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Content Provider, one of the methods for data storage and management in Android app development, is a powerful tool that allows safe data sharing between applications. In this tutorial, we will take a closer look at the concept of content providers and how to utilize them. Specifically, we will guide you step by step on &hellip; \ub354 \ubcf4\uae30 &quot;Title: Kotlin Android App Development Course, Understanding Content Providers&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37053\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:54:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:42:26+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/37053\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37053\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Title: Kotlin Android App Development Course, Understanding Content Providers\",\"datePublished\":\"2024-11-01T09:54:25+00:00\",\"dateModified\":\"2024-11-01T11:42:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37053\/\"},\"wordCount\":661,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin Android app development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37053\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37053\/\",\"name\":\"Title: Kotlin Android App Development Course, Understanding Content Providers - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:54:25+00:00\",\"dateModified\":\"2024-11-01T11:42:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37053\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37053\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37053\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Title: Kotlin Android App Development Course, Understanding Content Providers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Title: Kotlin Android App Development Course, Understanding Content Providers - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","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:\/\/atmokpo.com\/w\/37053\/","og_locale":"ko_KR","og_type":"article","og_title":"Title: Kotlin Android App Development Course, Understanding Content Providers - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Content Provider, one of the methods for data storage and management in Android app development, is a powerful tool that allows safe data sharing between applications. In this tutorial, we will take a closer look at the concept of content providers and how to utilize them. Specifically, we will guide you step by step on &hellip; \ub354 \ubcf4\uae30 \"Title: Kotlin Android App Development Course, Understanding Content Providers\"","og_url":"https:\/\/atmokpo.com\/w\/37053\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:54:25+00:00","article_modified_time":"2024-11-01T11:42:26+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/37053\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37053\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Title: Kotlin Android App Development Course, Understanding Content Providers","datePublished":"2024-11-01T09:54:25+00:00","dateModified":"2024-11-01T11:42:26+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37053\/"},"wordCount":661,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin Android app development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37053\/","url":"https:\/\/atmokpo.com\/w\/37053\/","name":"Title: Kotlin Android App Development Course, Understanding Content Providers - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:54:25+00:00","dateModified":"2024-11-01T11:42:26+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37053\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37053\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37053\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Title: Kotlin Android App Development Course, Understanding Content Providers"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=37053"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37053\/revisions"}],"predecessor-version":[{"id":37054,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37053\/revisions\/37054"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}