{"id":32957,"date":"2025-05-13T11:45:18","date_gmt":"2025-05-13T09:45:18","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=32957"},"modified":"2025-05-13T11:45:19","modified_gmt":"2025-05-13T09:45:19","slug":"start-building-rest-apis-with-django-rest-framework","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/","title":{"rendered":"Start building REST APIs with Django REST Framework"},"content":{"rendered":"\n<p>Django REST Framework (DRF) is one of the most powerful and flexible tools for building RESTful APIs in Python. This article will guide you step by step through the process of creating your first API endpoint, covering the use of serializers, views, and URL routing.<\/p>\n\n\n\n<p>In my previous article, we discussed how to structure your first Django project. If you haven&#8217;t seen it yet, <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/techpills-per-tutti-metti-in-moto-il-tuo-primo-progetto-django\/\">click here<\/a>, as we&#8217;ll pick up right where we left off.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-objectives\">Objectives<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Understand the role of Django REST Framework and why it is useful.<\/li>\n\n\n\n<li>Create a simple API endpoint for resource management.<\/li>\n\n\n\n<li>Execute GET and POST requests to read and write data.<\/li>\n<\/ul>\n\n\n\n<p>So, if you followed my previous article on Django, you already have a configured Django project. Now, let&#8217;s see how to expose data through an API.<\/p>\n\n\n\n<p>Django REST Framework (DRF) is an open-source framework that extends Django to build RESTful web APIs. It provides a complete set of tools for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Advanced Serialization<\/strong>: Converts Django model instances into formats (JSON, XML) usable by client applications and vice versa, ensuring data validation and custom field management.<\/li>\n\n\n\n<li><strong>View classes and ViewSets<\/strong>: Generic classes (e.g., ListCreateAPIView, RetrieveUpdateDestroyAPIView) and ViewSets to handle CRUD operations while minimizing boilerplate code.<\/li>\n\n\n\n<li><strong>Smart Routing<\/strong>: Automatic routers that dynamically associate ViewSets with URL routes, simplifying the definition of endpoints.<\/li>\n\n\n\n<li><strong>Authentication and Authorization<\/strong>: Native support for authentication methods (SessionAuth, TokenAuth, JWT) and permission classes to control access to resources.<\/li>\n\n\n\n<li><strong>Throttling, Filtering, and Pagination<\/strong>: Built-in mechanisms to limit requests, filter results, and paginate responses.<\/li>\n\n\n\n<li><strong>Browsable API<\/strong>: An interactive HTML interface to explore and test endpoints during development.<\/li>\n<\/ul>\n\n\n\n<p>It has a fairly intuitive workflow divided into serializers, views, and routers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Serializers<\/strong>: These handle the conversion between Python objects (typically Django model instances) and serialized representations (JSON, XML).<\/li>\n\n\n\n<li><strong>Views<\/strong>: DRF views process HTTP requests and return serialized responses. DRF offers generic classes (e.g., GenericAPIView, ListAPIView, CreateAPIView, etc.) for common operations. ViewSets aggregate multiple actions (list, create, retrieve, update, destroy) into a single class, working in synergy with Routers to reduce code further.<\/li>\n\n\n\n<li><strong>Routers<\/strong>: Routers automatically connect ViewSet actions to URL patterns. For example, by using DefaultRouter, you get endpoints like <code>\/notes\/<\/code> for list\/create and <code>\/notes\/{pk}\/<\/code> for retrieve\/update\/delete, without needing to manually write each URL.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Environment Setup<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Installation<\/h4>\n\n\n\n<p>Make sure Django is installed, and then add Django REST Framework:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">pip install djangorestframework<\/code><\/span><\/pre>\n\n\n<p>Add it to the installed apps in <code>settings.py<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">INSTALLED_APPS = &#91;\n\n\u00a0\u00a0\u00a0\u00a0...\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-string\">'rest_framework'<\/span>,\n]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-creating-the-model\">Creating the model<\/h2>\n\n\n\n<p>Let&#8217;s define a simple model for a note:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">from django.db import models\n\nclass Note(models.Model):\n\u00a0\u00a0\u00a0\u00a0title = models.CharField(max_length=100)\n\u00a0\u00a0\u00a0\u00a0content = models.TextField()\n\u00a0\u00a0\u00a0\u00a0created_at = models.DateTimeField(auto_now_add=True)<\/code><\/span><\/pre>\n\n\n<p>After defining the model, apply the migrations:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python<\/span> <span class=\"hljs-selector-tag\">manage<\/span><span class=\"hljs-selector-class\">.py<\/span> <span class=\"hljs-selector-tag\">makemigrations<\/span>\n\n<span class=\"hljs-selector-tag\">python<\/span> <span class=\"hljs-selector-tag\">manage<\/span><span class=\"hljs-selector-class\">.py<\/span> <span class=\"hljs-selector-tag\">migrate<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"gb-block-image gb-block-image-632c4306\"><img decoding=\"async\" class=\"gb-image gb-image-632c4306\" src=\"https:\/\/i.ibb.co\/yBh6BW5t\/Screenshot-2025-04-29-alle-11-52-17.png\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-creating-the-serializer\">Creating the Serializer<\/h2>\n\n\n\n<p>Let&#8217;s create a file inside our app directory and name it serializers.py.<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-5dc56aae\"><img decoding=\"async\" class=\"gb-image gb-image-5dc56aae\" src=\"https:\/\/i.ibb.co\/Pzj6D8Hc\/Screenshot-2025-04-29-alle-11-53-28.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>The serializers convert the database data into JSON format.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">from rest_framework import serializers\nfrom .models import Note\n\nclass NoteSerializer(serializers.ModelSerializer):\n\n\u00a0\u00a0\u00a0\u00a0class Meta:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0model = Note\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fields = '__all__'<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-creating-the-view\">Creating the View<\/h2>\n\n\n\n<p>Open the <code>views.py<\/code> file and delete all the existing code inside it.<\/p>\n\n\n\n<p>We will use a <code>ListCreateAPIView<\/code>, which allows retrieving the list of items (GET) and creating new ones (POST):<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">from rest_framework import generics\nfrom .models import Note\nfrom .serializers import NoteSerializer\n\nclass NoteListCreateView(generics.ListCreateAPIView):\n\u00a0\u00a0\u00a0\u00a0queryset = Note.objects.all()\n\u00a0\u00a0\u00a0\u00a0serializer_class = NoteSerializer<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-configuring-the-urls\">Configuring the URLs<\/h2>\n\n\n\n<p>Let&#8217;s add a URL for our API, so open the <code>urls.py<\/code> file within our app:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path\n<span class=\"hljs-keyword\">from<\/span> .views <span class=\"hljs-keyword\">import<\/span> NoteListCreateView\n\nurlpatterns = &#91;\n\u00a0\u00a0\u00a0\u00a0path(<span class=\"hljs-string\">'notes\/'<\/span>, NoteListCreateView.as_view(), name=<span class=\"hljs-string\">'note-list-create'<\/span>),\n]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In the main project&#8217;s <code>urls.py<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path, include\n\nurlpatterns = &#91;\n\u00a0\u00a0\u00a0\u00a0path(<span class=\"hljs-string\">'api\/'<\/span>, include(<span class=\"hljs-string\">'nome_app.urls'<\/span>)),\n]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-browsable-api-of-django-rest-framework\"><strong>The Browsable API of Django REST Framework<\/strong><\/h2>\n\n\n\n<p>Django REST Framework includes a built-in Browsable API that allows you to explore and interact with your endpoints directly from the browser, without needing to use other tools like Postman or curl. It\u2019s a true dynamic HTML user interface that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Displays resources<\/strong>: lists available fields, their types, and current values in a clear and readable format.<\/li>\n\n\n\n<li><strong>Supports CRUD operations<\/strong>: automatically provides forms to send GET, POST, PUT, and DELETE requests, filling in fields based on the serializer.<\/li>\n\n\n\n<li><strong>Manages authentication<\/strong>: allows users to log in via session or token directly from the interface, hiding or showing links based on permissions.<\/li>\n\n\n\n<li><strong>Shows errors<\/strong>: highlights validation errors with detailed messages next to fields, making debugging easier.<\/li>\n<\/ul>\n\n\n\n<p>No additional configuration is required to enable it: simply include &#8216;rest_framework&#8217; in INSTALLED_APPS and access the URL in the browser (e.g., <a class=\"\" href=\"http:\/\/127.0.0.1:8000\/api\/notes\/\">http:\/\/127.0.0.1:8000\/api\/notes\/<\/a>). The Browsable API is especially useful during development because it allows you to quickly test endpoints, check the data format, and visually understand the structure of JSON responses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-api-testing\">API Testing<\/h2>\n\n\n\n<p>We can test our endpoint using tools like curl or Postman, or by using the browsable API included in Django REST Framework.<\/p>\n\n\n\n<p>Now, let&#8217;s open the terminal and type:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python<\/span> <span class=\"hljs-selector-tag\">manage<\/span><span class=\"hljs-selector-class\">.py<\/span> <span class=\"hljs-selector-tag\">runserver<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"gb-block-image gb-block-image-298bdfcc\"><img decoding=\"async\" class=\"gb-image gb-image-298bdfcc\" src=\"https:\/\/i.ibb.co\/8nnhb7BX\/Screenshot-2025-04-29-alle-11-58-35.png\" alt=\"\"\/><\/figure>\n\n\n\n<p><strong>Example of a GET request:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl http:<span class=\"hljs-comment\">\/\/127.0.0.1:8000\/api\/notes\/<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example of a POST request:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl -X POST -H <span class=\"hljs-string\">\"Content-Type: application\/json\"<\/span> -d <span class=\"hljs-string\">'{\"title\": \"Test\", \"content\": \"Contenuto della nota\"}'<\/span> http:<span class=\"hljs-comment\">\/\/127.0.0.1:8000\/api\/notes\/<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Alternatively, using the browsable API:<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-eab6c676\"><img decoding=\"async\" class=\"gb-image gb-image-eab6c676\" src=\"https:\/\/i.ibb.co\/9mFCmhgM\/Screenshot-2025-04-29-alle-11-59-08.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"gb-block-image gb-block-image-3080e459\"><img decoding=\"async\" class=\"gb-image gb-image-3080e459\" src=\"https:\/\/i.ibb.co\/gZX95SvH\/Screenshot-2025-04-29-alle-12-01-45.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>If everything is working correctly, you should see the data returned in JSON format.<\/p>\n\n\n\n<figure class=\"gb-block-image gb-block-image-2c9723e0\"><img decoding=\"async\" class=\"gb-image gb-image-2c9723e0\" src=\"https:\/\/i.ibb.co\/kgHZMSCD\/Screenshot-2025-04-29-alle-12-02-14.png\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-best-practices\">Best Practices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-error-handling\"><strong>Error Handling<\/strong><\/h3>\n\n\n\n<p>DRF automatically handles common errors, but we can customize error messages if necessary.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-security\"><strong>Security<\/strong><\/h3>\n\n\n\n<p>To secure the API, you can implement authentication and authorization using DRF&#8217;s built-in mechanisms, such as Token Authentication or JWT.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-modularity\"><strong>Modularity<\/strong><\/h3>\n\n\n\n<p>For more complex projects, DRF provides ViewSets and Routers, which simplify the management of APIs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-next-steps\">Next Steps<\/h2>\n\n\n\n<p>We have seen how to create a simple REST APIs with Django REST Framework, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defining a model,<\/li>\n\n\n\n<li>Creating a serializer,<\/li>\n\n\n\n<li>Implementing a view,<\/li>\n\n\n\n<li>Configuring URLs,<\/li>\n\n\n\n<li>Testing the API with GET and POST.<\/li>\n<\/ul>\n\n\n\n<p>Now, you&#8217;re ready to develop more complex APIs and enhance your skills further!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Django REST Framework (DRF) is one of the most powerful and flexible tools for building RESTful APIs in Python. This article will guide you step by step through the process of creating your first API endpoint, covering the use of serializers, views, and URL routing. In my previous article, we discussed how to structure your&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/\">Read more<\/a><\/p>\n","protected":false},"author":317,"featured_media":32934,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[36],"tags":[],"collections":[13232],"class_list":{"0":"post-32957","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend","8":"collections-community","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Start building REST APIs with Django REST Framework<\/title>\n<meta name=\"description\" content=\"Learn how to get started with creating your first REST APIs endpoint, demonstrating the use of serializers, views, and URL routing.\" \/>\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.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Start building REST APIs with Django REST Framework\" \/>\n<meta property=\"og:description\" content=\"Learn how to get started with creating your first REST APIs endpoint, demonstrating the use of serializers, views, and URL routing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-13T09:45:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-13T09:45:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"raffaelegrieco.it\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"raffaelegrieco.it\" \/>\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.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/\"},\"author\":{\"name\":\"raffaelegrieco.it\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/49f7d5cbb5e20d151e460c3a9ce478d5\"},\"headline\":\"Start building REST APIs with Django REST Framework\",\"datePublished\":\"2025-05-13T09:45:18+00:00\",\"dateModified\":\"2025-05-13T09:45:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/\"},\"wordCount\":832,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp\",\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/\",\"name\":\"Start building REST APIs with Django REST Framework\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp\",\"datePublished\":\"2025-05-13T09:45:18+00:00\",\"dateModified\":\"2025-05-13T09:45:19+00:00\",\"description\":\"Learn how to get started with creating your first REST APIs endpoint, demonstrating the use of serializers, views, and URL routing.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp\",\"width\":1792,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/start-building-rest-apis-with-django-rest-framework\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Start building REST APIs with Django REST Framework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/49f7d5cbb5e20d151e460c3a9ce478d5\",\"name\":\"raffaelegrieco.it\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/IMG_6306-100x100.jpg\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/IMG_6306-100x100.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/IMG_6306-100x100.jpg\",\"caption\":\"raffaelegrieco.it\"},\"description\":\"Aspiring Computer Engineer dedicated to crafting innovative solutions and tackling complex challenges. With a strong foundation in backend development, I also delve into frontend and mobile development to create seamless and comprehensive applications. Always eager to learn and explore new technologies to enhance my skills and contribute effectively to the developer community.\",\"sameAs\":[\"https:\\\/\\\/raffaelegrieco.it\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/raffaelegrieco\\\/\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/raffaelegrieco-it\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Start building REST APIs with Django REST Framework","description":"Learn how to get started with creating your first REST APIs endpoint, demonstrating the use of serializers, views, and URL routing.","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.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/","og_locale":"en_US","og_type":"article","og_title":"Start building REST APIs with Django REST Framework","og_description":"Learn how to get started with creating your first REST APIs endpoint, demonstrating the use of serializers, views, and URL routing.","og_url":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-05-13T09:45:18+00:00","article_modified_time":"2025-05-13T09:45:19+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp","type":"image\/webp"}],"author":"raffaelegrieco.it","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"raffaelegrieco.it","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/"},"author":{"name":"raffaelegrieco.it","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/49f7d5cbb5e20d151e460c3a9ce478d5"},"headline":"Start building REST APIs with Django REST Framework","datePublished":"2025-05-13T09:45:18+00:00","dateModified":"2025-05-13T09:45:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/"},"wordCount":832,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp","articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/","url":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/","name":"Start building REST APIs with Django REST Framework","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp","datePublished":"2025-05-13T09:45:18+00:00","dateModified":"2025-05-13T09:45:19+00:00","description":"Learn how to get started with creating your first REST APIs endpoint, demonstrating the use of serializers, views, and URL routing.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp","width":1792,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/start-building-rest-apis-with-django-rest-framework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"Start building REST APIs with Django REST Framework"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/49f7d5cbb5e20d151e460c3a9ce478d5","name":"raffaelegrieco.it","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/01\/IMG_6306-100x100.jpg","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/01\/IMG_6306-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/01\/IMG_6306-100x100.jpg","caption":"raffaelegrieco.it"},"description":"Aspiring Computer Engineer dedicated to crafting innovative solutions and tackling complex challenges. With a strong foundation in backend development, I also delve into frontend and mobile development to create seamless and comprehensive applications. Always eager to learn and explore new technologies to enhance my skills and contribute effectively to the developer community.","sameAs":["https:\/\/raffaelegrieco.it","https:\/\/www.linkedin.com\/in\/raffaelegrieco\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/raffaelegrieco-it\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--600x600.webp","author_info":{"display_name":"raffaelegrieco.it","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/raffaelegrieco-it\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with-.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/04\/DALL\u00b7E-2025-05-12-15.19.18-An-image-representing-the-concept-of-creating-REST-APIs-with-Django-REST-Framework-with-no-text-included.-The-scene-includes-a-modern-workspace-with--600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"raffaelegrieco.it","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/raffaelegrieco-it\/"},"uagb_comment_info":0,"uagb_excerpt":"Django REST Framework (DRF) is one of the most powerful and flexible tools for building RESTful APIs in Python. This article will guide you step by step through the process of creating your first API endpoint, covering the use of serializers, views, and URL routing. In my previous article, we discussed how to structure your&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/32957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/317"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=32957"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/32957\/revisions"}],"predecessor-version":[{"id":32963,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/32957\/revisions\/32963"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/32934"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=32957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=32957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=32957"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=32957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}