REST PUT请求返回GET 500错误,是否合理?

时间:2013-11-13 10:55:18

标签: php rest angularjs

我不是任何一种RESTful API专家,但我在AngularJS应用程序中有一个简单的PUT/DELETE函数,该函数到目前为止一直按预期运行。我试图弄清楚这个问题是否可能存在于我的应用程序或运行端点的(php)后端。其他REST服务正常运行&服务器似乎运行正常。

此功能仅调用PUT或DELETE,分配为var method

     if (food.favourite === true) {
                method = "PUT";
                console.log("method is " + method)

            } else if (food.favourite === false) {
                method = "DELETE";
                console.log("method is " + method)
            }
            $http({
                method: method,
                url: $scope.URL
            }).success(function (data, status, headers, config) {
                console.log(method + " successful")
            }).error(function (data, status, headers, config) {
                    console.log(method + " not successful")
            });

我的应用中有一个$http GET使用不同的端点。在我的应用程序中的任何地方都没有$http GET指向此端点 - 我已经广泛搜索过。

当我触发包含$ http的函数时,控制台会显示:

 method is PUT 
 GET http://localhost:8888/api/ext/51/ 500 (Internal Server Error)
 PUT not successful 

为什么我会在不成功的PUT请求中收到GET错误?这是指我的函数中的问题,还是端点问题?

感谢您在理解此问题时提供任何帮助。


更新1

来自网络面板的信息:调用上面的$ http函数会触发两个同时发出的请求,一个'PUT'和一个'GET'。 'PUT'返回301代码,'GET'返回500服务器错误(我认为这是预期的,因为此端点未设置为响应'GET',仅为'PUT'和'DELETE “)。

那么:为什么我的代码会用不同的方法生成两个同时发出的请求?

2 个答案:

答案 0 :(得分:0)

对于未来寻求类似问题答案的求职者:它是一种标准行为(一般是REST还是这种实现?不确定)尝试为每个被调用的动作返回GET。这方面的证据是,如果我检查网络面板中所有其他(成功的)$ http函数,它们还有两个可见的操作:原始PUT / GET / DELETE等,+一个GET。

我们在GET上看到这些特定请求的500错误,因为此特定端点的配置不允许GET。这不应对此端点上的PUT / DELETE操作产生任何影响 - 500错误与PUT / DELETE操作无效的原因无关。在试图解决这个具体问题方面,它是一个红色的鲱鱼。

PUT / DELETE无法正常工作的原因是因为服务在服务器端被破坏了。

答案 1 :(得分:0)

我遇到了这个问题,问题在于我如何输出header的第一个参数中的错误。他们需要采用以下格式:

header('400: Error', true, 400);

或者在你的情况下,当然:

header('301: Moved Permanently', true, 301);
header('Location: ' . $url);

请注意,这不起作用:

header('Some Random Text', true, 400); // $http.error shows status of 500