Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php api.example.com比example.com/api好吗?_Php_Ruby_Api_Rest_Subdomain - Fatal编程技术网

Php api.example.com比example.com/api好吗?

Php api.example.com比example.com/api好吗?,php,ruby,api,rest,subdomain,Php,Ruby,Api,Rest,Subdomain,大多数流行的RESTful API似乎更喜欢子域而不是子目录: api.twitter.com api.linkedin.com api.foursquare.com graph.facebook.com 我想知道这背后是否有技术上的争论。需要考虑的是跨域AJAX调用。如果你在一个网站domain.com上,你不能对sub.domain.com进行AJAX调用,这是一个负载平衡的问题 twitter.com的地址是199.59.150.39 twitter.com的地址是199.59.149

大多数流行的RESTful API似乎更喜欢子域而不是子目录:

  • api.twitter.com
  • api.linkedin.com
  • api.foursquare.com
  • graph.facebook.com

我想知道这背后是否有技术上的争论。

需要考虑的是跨域AJAX调用。如果你在一个网站
domain.com
上,你不能对
sub.domain.com

进行AJAX调用,这是一个负载平衡的问题

twitter.com的地址是199.59.150.39
twitter.com的地址是199.59.149.230
twitter.com的地址是199.59.150.7
api.twitter.com的地址是199.59.150.9
api.twitter.com的地址是199.59.149.232
api.twitter.com的地址是199.59.148.20
api.twitter.com的地址是199.59.148.87

api.linkedin.com的地址是216.52.242.83
linkedin.com的地址是216.52.242.86

api.foursquare.com的地址为50.19.210.39
foursquare.com的地址是50.16.220.173

graph.facebook.com的地址为66.220.146.87
facebook.com的地址是66.220.158.11
facebook.com的地址是69.171.229.11
facebook.com的地址是69.171.242.11
facebook.com的地址是66.220.149.11

当您在客户端将web与API分离而不是使用代理时,它确实有助于稳定性。例如,Twitter自己的站点在Ruby上运行,而后端主要用Scala编写。代理可以路由这两个站点,但它需要大量到API和主站点的连接,从而导致连接池的大小增加一倍


另一个优点是,当你的API宕机时,该网站仍能正常工作(不适用于Twitter,因为该网站是建立在API之上的)。

如果你想要API服务,使用另一台服务器(大规模)
API.domain.com
更好,但是您希望中小型
domain.com/api
中的AJAX更好。

我能想到的一个原因是,您可以使用子域方法使用DNS将api请求路由到不同的服务器,而不必在使用
/api
时使用代理或负载平衡器。这对于非常大容量的API尤其重要。当然可以。放在这两个文件的顶部,您的浏览器会将它们视为位于
domain.com
上。您也可以使用JSONP.AJAX来处理子域,尽管它需要一个小的
document.domain
hack。