1

Я планирую API для собственного использования в Python. Возможно, когда-нибудь я сделаю это свободно доступным, но теперь я только планирую использовать его на своем сайте для хобби. На этом этапе мне нужны советы по настройке URL-адресов, для файлов, которые получают запросы GET и POST.Наименее ресурсоемкий способ настроить 4 'симпатичных' URL-адреса?

Пусть один из моих файлов называется 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-адреса.

ответ

1

MYYN правильный. Использование структуры, такой как 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, выполняют практически одно и то же: все запросы перенаправляются на один файл/класс/функцию.

+0

Правильно ли я полагаю, что явное перенаправление 4 URL-адресов является более дешевым, чем использование RewriteCond типа Regex, или я чрезмерно оптимизирую? – Pranab

+0

Если есть только 4 URL-адреса, вы, вероятно, правы. Тем не менее, в примере .htaccess я не использовал регулярные выражения. –

+0

Перенаправление содержимого через index.php просто означает смещение логики и еще одно перенаправление HTTP. Это совершенно практичное и приемлемое решение, но я (возможно, педантично) задавался вопросом о наименее ресурсоемких. – Pranab

1

Я полагаю, что API-интерфейсы веб-сервисов с красивыми URL-адресами (aka REST) ​​создаются с помощью какой-либо webframework (Werkzeug, web.py, django, pylons, cherrypy, plain wsgi, ...).

Модуль, на который вы ссылаетесь, заботится о согласовании/обработке URL-адресов, чтобы определить правильный маршрут для запроса.

Из документации последнего:

Маршруты Снасти интересная проблема, которая приходит вверх часто в Интернете как вы сопоставляете URL-адреса с действиями вашего приложения? То есть, как вы говорите, что к этому нужно обращаться как /blog/2008/01/08, и /login должен это сделать? Многие веб-структуры имеют фиксированную систему диспетчеризации; например, /A/B/C означает считывание файла C в каталоге B или для вызова метода C класса B в модуле A.B. Они работают нормально, пока вам не понадобится реорганизовать свой код, и поймите, что перемещение метода изменяет его общедоступный URL-адрес и делает недействительными закладки пользователей. Аналогичным образом, если вы хотите реорганизовать свои URL-адреса и сделать раздел в подраздел, вы должны изменить свой тщательно протестированный логический код.

+0

Благодарим вас за помощь в выяснении того, что я должен искать лучшие методы REST! – Pranab

1

Да, .htaccess - это способ, которым вы можете сопоставить красивый, внешний URL-адрес в Apache Server с некоторым грязным URL-адресом, который принимает ваша платформа услуг.

Некоторые сложные платформы также имеют средства для создания более удобных URL-адресов.

1

Нет никакой магии. Вы просто используете веб-сервер, который был разработан с использованием URL-адресов на основе файлов.

Большинство сайтов больше не докучают URL-адресами на основе файлов и вместо этого выполняют свою собственную отправку. Это то, что делает Django, это то, что делает ASP.NET MVC.

Что вам нужно для поиска: mod_rewrite для Apache. Это позволит вам сопоставлять нефайловые URL-адреса с вашими файлами Python.

В качестве альтернативы можно воспользоваться веб-картой Python, которая уже делает это. Web.py и Django хороши.

Смежные вопросы