{"id":514764,"date":"2024-09-30T14:38:31","date_gmt":"2024-09-30T13:38:31","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=514764"},"modified":"2025-12-06T19:24:57","modified_gmt":"2025-12-06T18:24:57","slug":"python-web-development","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/en\/pycharm\/2024\/09\/python-web-development","title":{"rendered":"What\u2019s the Big Deal About Endpoints for Python Web Development?"},"content":{"rendered":"\n<p>Python has almost 30 years of history doing Python web development. Can you believe it? But 3-tier web projects have gotten really complicated and stressful. You\u2019re busy, everything is all over the place \u2013 it\u2019s hard! <\/p>\n\n\n\n<p>But PyCharm is here to help: bring your work together with the Endpoints tool window. I just made a video explainer:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Working efficiently with APIs in Python\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/cF0cN3JgU4M?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n    <div class=\"buttons\">\n        <div class=\"buttons__row\">\n                                                <a href=\"https:\/\/www.jetbrains.com\/pycharm\/download\/?section=mac\" class=\"btn\" target=\"_blank\" rel=\"noopener\">Try the Endpoints tool window! <\/a>\n                                                    <\/div>\n    <\/div>\n\n\n\n\n\n\n\n<p>Here are 3 things from the video that I really like about endpoints. Plus a bonus point at the end.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">First\u2026where is everything?<\/h2>\n\n\n\n<p>Python web projects can get really big, really fast. If you\u2019re like me, it can be overwhelming \u2013 and exhausting. I really need a \u201chelper brain\u201d \u2013 one that deeply understands each web framework \u2013 to stitch everything together.<\/p>\n\n\n\n<p>PyCharm has long provided icons to navigate from a view to a template, and vice versa. Endpoints adds icons to jump from a view to the route definition, to the parent context, and generate a request to this API.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.51.48.png\" alt=\"endpoints icons to navigate\"\/><\/figure>\n\n\n\n<p>I like to use my keyboard instead of the mouse. Good news \u2013 endpoints is wired into searchable actions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.34.20.png\" alt=\"endpoints keyboard shortcut pycharm\"\/><\/figure>\n\n\n\n<p>Want a birds-eye view of all your endpoints? The Endpoints tool window shows all your APIs, with filtering by subapp, type, and framework.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.35.42.png\" alt=\"endpoints filtering by subapp, type, and framework\"\/><\/figure>\n\n\n\n<p>It\u2019s more than a list. Each entry lets you jump to the endpoint and perform operations.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"958\" height=\"670\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.37.30.png\" alt=\"endpoint operations\" class=\"wp-image-514848\"\/><\/figure>\n\n\n\n<p>These operations have framework-specific smarts, such as knowing the \u201cparent context\u201d for Django vs. Flask vs. FastAPI.<\/p>\n\n\n\n<p>I like having this tool window when I\u2019m thinking about the <em>whole<\/em> application. But I like even more how endpoints brings these operations into the editor, to my cursor, helping me focus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bring IDE smarts, into APIs<\/h2>\n\n\n\n<p>Our IDE has deep insight to connect the dots in Python development. What if we applied that to Python web frameworks?<\/p>\n\n\n\n<p>I can\u2019t remember all my API names. Endpoints gives me autocomplete in the HTTP client and even in JavaScript fetch.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.38.19.png\" alt=\"endpoints autocomplete http client\"\/><\/figure>\n\n\n\n<p>Thanks to endpoints, these routes become symbols. I\u2019m a symbol-first coder, using autocomplete, warnings, and navigation to the max. Now I can apply that with the web framework syntax for APIs.<\/p>\n\n\n    <div class=\"buttons\">\n        <div class=\"buttons__row\">\n                                                <a href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/\" class=\"btn\" target=\"_blank\" rel=\"noopener\">Python IDE with API Endpoints &amp; HTTP Client<\/a>\n                                                    <\/div>\n    <\/div>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Stay in one tool<\/h2>\n\n\n\n<p>I\u2019ve always liked the \u201cI\u201d in IDE: integrating my important workflows into a single, consistent experience. Web development can mean bouncing around between lots of windows. What if we could bring that workflow into PyCharm?<\/p>\n\n\n\n<p>We already brought best-in-class frontend development from WebStorm and database development from DataGrip.<\/p>\n\n\n\n<p>Using our HTTP Client, you have a productive, mature workflow for issuing HTTP requests. No need to go to the browser or <em>purchase another tool<\/em>. With endpoints, HTTP Client gets easier and smarter. For example, issue an HTTP request, directly from the API listing.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.46.32.png\" alt=\"endpoints responses and detection\"\/><\/figure>\n\n\n\n<p>As shown above, writing these HTTP requests is easier thanks to autocomplete, as endpoints knows your web framework and its route definitions.<\/p>\n\n\n\n<p>You can also browse the OpenAPI documentation of your endpoint without going to a browser.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.48.02.png\" alt=\"OpenAPI documentation of endpoints\"\/><\/figure>\n\n\n\n<p>The \u201cI\u201d in IDE means it is one team that is bringing these features across web frameworks. When I learn a way of working once, I can use it when I shift to a project with another supported web framework. Same features, same UI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Innovation in Python web development<\/h2>\n\n\n\n<p>Python web development needs fresh new ideas and with it, new thinking in tooling. Endpoints says: \u201cYou are going to use multiple frameworks on lots of big projects. Let\u2019s step back, focus on the problem, re-imagine the workflow, and throw a bunch of powerful IDE machinery at it.\u201d<\/p>\n\n\n\n<p>Just this one tool window has so much value in it: a listing of your API, with info about HTTP method, and right-click available for each. Then, tabs for the common operations, keeping you in the IDE and in the flow.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/09\/Screenshot-2024-09-30-at-14.49.42.png\" alt=\"endpoints tool window - python web development\n\"\/><\/figure>\n\n\n\n<p>So that\u2019s endpoints, a vision from PyCharm to make API development joyful and productive. Give it a try and let us know what you think.<\/p>\n\n\n    <div class=\"buttons\">\n        <div class=\"buttons__row\">\n                                                <a href=\"https:\/\/jb.gg\/luwqsf\" class=\"btn\" target=\"\" rel=\"noopener\">Try the Endpoints tool window! <\/a>\n                                                    <\/div>\n    <\/div>\n\n\n\n\n","protected":false},"author":440,"featured_media":514975,"comment_status":"closed","ping_status":"closed","template":"","categories":[8377],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/pycharm\/514764"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/440"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=514764"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/pycharm\/514764\/revisions"}],"predecessor-version":[{"id":666205,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/pycharm\/514764\/revisions\/666205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/514975"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=514764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=514764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=514764"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=514764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}