Api 设置4个“漂亮”URL的最少资源密集型方法?

Api 设置4个“漂亮”URL的最少资源密集型方法?,api,.htaccess,file-extension,application-planning,pretty-urls,Api,.htaccess,File Extension,Application Planning,Pretty Urls,我正在计划一个自己使用的Python API。也许有一天我会让它免费访问,但现在我只打算在我的爱好网站上使用它。在这个阶段,我需要一些关于如何为接收GET和POST请求的文件设置URL的建议 假设我的一个文件名为function_A.py,并以以下方式使用: www.example.com/api/function_A.py?a=something&k=other+thing 我的问题是,如何以最少的资源密集型方式在API中设置“漂亮”URL 我看到大多数API都有一个典型的URL格式

我正在计划一个自己使用的Python API。也许有一天我会让它免费访问,但现在我只打算在我的爱好网站上使用它。在这个阶段,我需要一些关于如何为接收GET和POST请求的文件设置URL的建议

假设我的一个文件名为function_A.py,并以以下方式使用:

www.example.com/api/function_A.py?a=something&k=other+thing
我的问题是,如何以最少的资源密集型方式在API中设置“漂亮”URL

我看到大多数API都有一个典型的URL格式,如http://www.example.com/api/read 而不是http://www.example.com/api/read.py

我的选项可能仅限于使用Django修改v/s url.py,或者还有其他更简单的选项吗


这是针对后端/API的,我宁愿将开销保持在最低限度。我只希望以这种方式处理4个URL,不希望每次调用URL时都出现正则表达式。

我的猜测是,带有漂亮URL(又称REST)的web服务API是通过某种webframework Werkzeug、web.py、django、pylons、cherrypy、plain wsgi等构建的

您所指的模块负责url匹配/处理,以确定请求的正确路由

wsgi路由示例: 路线套餐: 从后者的文件中:

Routes解决了web开发中经常出现的一个有趣问题,即如何将URL映射到应用程序的操作?也就是说,你怎么说这应该以/blog/2008/01/08的形式访问,而/login应该这样做?许多web框架都有固定的调度系统;e、 例如,/A/B/C意味着读取目录B中的文件C,或者调用模块A.B中类B的方法C。在需要重构代码并意识到移动方法会更改其公共URL并使用户的书签无效之前,这些方法可以正常工作。同样,如果你想重新组织你的URL并把一个部分变成一个子部分,你必须改变你仔细测试过的逻辑代码


我的猜测是,带有漂亮URL(又称REST)的web服务API是通过某种webframework Werkzeug、web.py、django、pylons、cherrypy、plain wsgi等构建的

您所指的模块负责url匹配/处理,以确定请求的正确路由

wsgi路由示例: 路线套餐: 从后者的文件中:

Routes解决了web开发中经常出现的一个有趣问题,即如何将URL映射到应用程序的操作?也就是说,你怎么说这应该以/blog/2008/01/08的形式访问,而/login应该这样做?许多web框架都有固定的调度系统;e、 例如,/A/B/C意味着读取目录B中的文件C,或者调用模块A.B中类B的方法C。在需要重构代码并意识到移动方法会更改其公共URL并使用户的书签无效之前,这些方法可以正常工作。同样,如果你想重新组织你的URL并把一个部分变成一个子部分,你必须改变你仔细测试过的逻辑代码


是的,.htaccess是一种将Apache服务器中漂亮的外部URL映射到服务平台所接受的肮脏URL的方法


一些复杂的平台也有办法生成更好的URL。

是的,.htaccess是一种将Apache服务器中漂亮的外部URL映射到您的服务平台接受的肮脏URL的方法


一些复杂的平台也有办法生成更好的URL。

没有什么神奇之处。您正好使用了一个web服务器,它的设计考虑了基于文件的URL

大多数网站不再为基于文件的URL而烦恼,而是自己发送。这就是Django所做的,这就是ASP.NETMVC所做的

您需要查找的是Apache。它将允许您将非基于文件的URL映射到Python文件


或者,看看使用一个已经做到这一点的pythonweb框架。而且很好。

没有魔法。您正好使用了一个web服务器,它的设计考虑了基于文件的URL

大多数网站不再为基于文件的URL而烦恼,而是自己发送。这就是Django所做的,这就是ASP.NETMVC所做的

您需要查找的是Apache。它将允许您将非基于文件的URL映射到Python文件


或者,看看使用一个已经做到这一点的pythonweb框架。而且很好。

MYYN是正确的。使用RubyonRails或Django等框架是创建RESTfulAPI的最简单方法

但是,如果您不想使用框架,可以在Apache中使用mod_rewrite做同样的事情。事实上,这正是运行在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这样的框架实际上
同样的道理:所有请求都被重定向到单个文件/类/函数。

MYYN是正确的。使用RubyonRails或Django等框架是创建RESTfulAPI的最简单方法

但是,如果您不想使用框架,可以在Apache中使用mod_rewrite做同样的事情。事实上,这正是运行在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这样的框架实际上做了同样的事情:所有请求都被重定向到一个文件/类/函数。

我是否正确地认为显式重定向4个URL在计算上比使用Regex类型的RewriteCond便宜,或者我是否过度优化了?如果只有4个URL,您可能是正确的。然而,我发布的.htaccess示例没有使用正则表达式。通过index.php重定向内容只意味着将逻辑转移到那里,然后再进行一次HTTP重定向。这是一个完全实用且可接受的解决方案,但我学究式地想知道资源密集度最低的解决方案。在这种方法中,您根本不需要重定向。您只是让index.php处理大多数请求。重写不是重定向。如果您只有4个永远不会更改的URL,那么在4个目录中使用索引文件可能会更容易,但您正在尝试构建一个API,它可能有4个以上的URL和参数。我是否正确地认为显式重定向4个URL在计算上比使用正则表达式类型重写更便宜,或者我优化过度了?如果只有4个URL,你可能是对的。然而,我发布的.htaccess示例没有使用正则表达式。通过index.php重定向内容只意味着将逻辑转移到那里,然后再进行一次HTTP重定向。这是一个完全实用且可接受的解决方案,但我学究式地想知道资源密集度最低的解决方案。在这种方法中,您根本不需要重定向。您只是让index.php处理大多数请求。重写不是重定向。如果您只有4个永远不会更改的URL,那么在4个目录中使用索引文件可能会更容易,但您正在尝试构建一个API,它可能有4个以上的URL和参数。感谢您帮助我了解我应该查找REST最佳实践!感谢您帮助我了解我应该查找REST最佳实践!