Наименее ресурсоемкий способ настроить 4 «красивых» URL-адреса?
-
21-09-2019 - |
Вопрос
Я планирую API для собственного использования на Python.Возможно, когда-нибудь я сделаю его доступным для свободного доступа, но пока планирую использовать его только на своем хобби-сайте.На этом этапе мне нужен совет о том, как настроить URL-адреса для файлов, которые получают запросы GET и POST.
Предположим, один из моих файлов называется function_A.py
и используется таким образом:
www.example.com/api/function_A.py?a=something&k=other+thing
Мой вопрос: как настроить «красивые» URL-адреса в API наименее ресурсоемким способом?
Я вижу, что большинство API имеют типичный формат URL, например http://www.example.com/api/read
вместо http://www.example.com/api/read.py
Мои возможности, вероятно, ограничены mod_rewrite
против urls.py
используя Django – или есть другой более простой вариант?
Это для серверной части/API, и я бы предпочел свести накладные расходы к минимуму.Я хочу обрабатывать таким образом только 4 URL-адреса и не хочу, чтобы регулярное выражение возникало каждый раз при вызове URL-адреса.
Решение
МИН правильно.Использование такой платформы, как Ruby on Rails или Django, — это самый простой способ создать RESTful API.
Однако, если вы не хотите использовать фреймворк, вы можете сделать то же самое, используя mod_rewrite в Apache.Фактически, это именно то, что делает большинство фреймворков/приложений, работающих на Apache.
Например, Wordpress использует файл .htaccess следующим образом:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Это направляет все запросы на index.php, где они могут быть проанализированы и обработаны.
Такие фреймворки, как RoR или Django, делают практически то же самое:все запросы перенаправляются в один файл/класс/функцию.
Другие советы
Я предполагаю, что API веб-сервисов с красивыми URL-адресами (также известными как REST) создаются с помощью какой-то веб-инфраструктуры (Werkzeug, web.py, django, pylons, Cherrypy, Plain WsGI,...).
Модуль, на который вы ссылаетесь, заботится о сопоставлении/обработке URL-адресов, чтобы определить правильный маршрут для запроса.
- Пример маршрутизации wsgi: http://wsgi.org/wsgi/Specifications/routing_args
- пакет маршрутов: http://routes.groovie.org/
Из документации последнего:
Routes решает интересную проблему, которая часто возникает в веб-разработке: как сопоставить URL-адреса с действиями вашего приложения?То есть, как вы говорите, что к этому следует обращаться как
/blog/2008/01/08
, и/login
должен это сделать?Многие веб-фреймворки имеют фиксированную систему диспетчеризации;например.,/A/B/C
значит прочитать файлC
в каталогеB
, или вызвать методC
классаB
в модулеA.B
.Они работают нормально, пока вам не понадобится провести рефакторинг кода и не осознать, что перемещение метода меняет его общедоступный URL-адрес и делает недействительными закладки пользователей.Аналогично, если вы хотите реорганизовать свои URL-адреса и превратить раздел в подраздел, вам придется изменить тщательно проверенный логический код.
Да, .htaccess — это способ сопоставить красивый внешний URL-адрес на сервере Apache с каким-то грязным URL-адресом, который принимает ваша сервисная платформа.
Некоторые сложные платформы также имеют средства для создания более красивых URL-адресов.
Никакого волшебства.Вы случайно используете веб-сервер, который был разработан с учетом файловых URL-адресов.
Большинство сайтов больше не беспокоятся о файловых URL-адресах и вместо этого выполняют собственную отправку.Это то, что делает Django, это то, что делает ASP.NET MVC.
Что вам нужно найти, это mod_rewrite для Апача.Это позволит вам сопоставлять URL-адреса, не основанные на файлах, с вашими файлами Python.
В качестве альтернативы рассмотрите возможность использования веб-фреймворка Python, который уже делает это. Веб.py и Джанго милые.