In the devices example that's used, it is my opinion that the device that you are trying to locate is the resource, "/devices" is merely the context. Therefore if a resource cannot be located a 404 no content is acceptable. However, when looking at things from a AJAX request perspective, this kind of scenario become tricky to handle.
Even when I started on working on the UI stabilisation effort, i thought 204 was the way to go, however upon further reading and looking at things from aforementioned perspective, IMHO 404 seems the right response to return when a resource is not found. Thanks and Regards, Ruwan Yatawara Associate Technical Lead, WSO2 Inc. email : ruw...@wso2.com mobile : +94 77 9110413 blog : http://ruwansrants.blogspot.com/ https://500px.com/ruwan_ace www: :http://wso2.com On Wed, Jun 15, 2016 at 11:15 AM, Rasika Perera <rasi...@wso2.com> wrote: > Hi All, > > > >> I think that even though it is a single resource or a collection it >> should not be handled differently. if there is no resource behind the URI >> then it should be 404. > > -1. "/devices" is your resource in this case. and it is a *collection*. > Query components are for retrieval of non-hierarchical data > . You should not use the query string to identify a *single* resource. > "?type={platform}" is not a part of your resources hierarchy. Hence > returning 404 may convey that "/devices" is non-existant and client should > not try "/devices" on proceeding requests. > > Thanks, > Rasika > > > > On Wed, Jun 15, 2016 at 10:51 AM, Geeth Munasinghe <ge...@wso2.com> wrote: > >> >> >> On Wed, Jun 15, 2016 at 10:11 AM, Ayyoob Hamza <ayy...@wso2.com> wrote: >> >>> I think that even though it is a single resource or a collection it >>> should not be handled differently. if there is no resource behind the URI >>> then it should be 404. >>> >> -1, >> AFAIK, it is an actual endpoint (URL) refers to a resource. (In case of >> "/devices?{query_params}", "/devices" is the resource) It does not matter >> that resource returns an output or not. Because resource can return an >> empty body for a request which in my opinion a valid response. Furthermore >> returning a empty body does not mean that resource is not found (404) (in >> case of /devices, it is there) or client has made an error with the >> request. Empty body means that no records available in database matching >> the filtering criteria. 404 implies a wrong message to the client, which >> means that he has done something wrong with the request. If we send 404 for >> empty body (returns due to no records in the database), then later same >> request will behave differently when database has relevant data. In my >> opinion, it should return 200 for empty body. >> >> According to [1] 4XX is used for client side errors. >> >> [1] https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html >> >> Thanks >> Geeth >> >>> >>> However this could be subjective so have to delve into our rest >>> guidelines to make a decision on it. >>> >>> [Adding Frank and Joe] >>> >>> *Ayyoob Hamza* >>> *Software Engineer* >>> WSO2 Inc.; http://wso2.com >>> email: ayy...@wso2.com cell: +94 77 1681010 <%2B94%2077%207779495> >>> >>> On Wed, Jun 15, 2016 at 8:47 AM, Rasika Perera <rasi...@wso2.com> wrote: >>> >>>> For example, /devices/{device-id} is a URI. Hence, by the time client >>>>> makes a request for a non-existing device id, that results in a URI that >>>>> could not be found and returning a 404 for that is perfectly valid. >>>> >>>> +1 >>>> >>>> But if we take an example like this, /devices?type={platform}, here the >>>>> URI is /devices. If we return a 404 here at any instance, what it simply >>>>> means is that the requested URI (/devices) could not be found in the >>>>> server >>>>> and should not be used anymore which is wrong. It's a defined resource >>>>> collection that can exist in the server with 0 to many items. >>>> >>>> Yes, In this case, I prefer a empty list with HTTP 200 is more >>>> intuitive and reduces complexities at the client side processing(i.e. >>>> if-check for 204). >>>> >>>> The query component contains non-hierarchical data >>>> . >>>> "/devices" will give you all devices. >>>> "/devices?type=non-existent-type" will return empty list of devices since >>>> no matching device exist. Simply your filtering criteria haven't met any >>>> device. >>>> >>>> On Wed, Jun 15, 2016 at 7:22 AM, Dilan Udara Ariyaratne < >>>> dil...@wso2.com> wrote: >>>> >>>>> I also think that Geeth is making a valid point here and it makes >>>>> sense in practice. >>>>> >>>>> According to the w3c specification on status codes, >>>>> 4XX http status code range is totally reserved for client errors and >>>>> 404 is specifically returned when the requested "URI" could not be found >>>>> in >>>>> the server. >>>>> >>>>> For example, /devices/{device-id} is a URI. Hence, by the time client >>>>> makes a request for a non-existing device id, that results in a URI that >>>>> could not be found and returning a 404 for that is perfectly valid. >>>>> >>>>> But if we take an example like this, /devices?type={platform}, here >>>>> the URI is /devices. If we return a 404 here at any instance, what it >>>>> simply means is that the requested URI (/devices) could not be found in >>>>> the >>>>> server and should not be used anymore which is wrong. It's a >>>>> defined resource collection that can exist in the server with 0 to many >>>>> items. >>>>> >>>>> Therefore, in such instances where we do not query for exact >>>>> resources, but for a possible collection of resources in the server using >>>>> query parameters, it's much better to return an empty set with a 200 >>>>> rather >>>>> than a 404 if there exist zero items by the time of request. >>>>> >>>>> Cheers, >>>>> Dilan. >>>>> >>>>> On Wednesday, June 15, 2016, Kamidu Punchihewa <sachi...@wso2.com> >>>>> wrote: >>>>> >>>>>> Hi All, >>>>>> >>>>>> Agreed with Geeth and Harshan, When it come to the OOB User interface >>>>>> of EMM the request with an 404 is detect as an error and your is prompted >>>>>> with an error message since the error handling is handling in a Central >>>>>> controller witch acts in general so if there are no error occurred in the >>>>>> sever side best approach not to return status code in 400 - 499 range. >>>>>> >>>>>> Thanks & Best Regards, >>>>>> >>>>>> Kamidu Sachith Punchihewa >>>>>> *Software Engineer* >>>>>> WSO2, Inc. >>>>>> lean . enterprise . middleware >>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194> >>>>>> >>>>>> >>>>>> Disclaimer: This communication may contain privileged or other >>>>>> confidential information and is intended exclusively for the addressee/s. >>>>>> If you are not the intended recipient/s, or believe that you may have >>>>>> received this communication in error, please reply to the sender >>>>>> indicating >>>>>> that fact and delete the copy you received and in addition, you should >>>>>> not >>>>>> print, copy, retransmit, disseminate, or otherwise use the information >>>>>> contained in this communication. Internet communications cannot be >>>>>> guaranteed to be timely, secure, error or virus-free. The sender does not >>>>>> accept liability for any errors or omissions. >>>>>> >>>>>> On Wed, Jun 15, 2016 at 12:18 AM, Harshan Liyanage <hars...@wso2.com> >>>>>> wrote: >>>>>> >>>>>>> +1 >>>>>>> >>>>>>> Harshan Liyanage >>>>>>> Senior Software Engineer >>>>>>> Mobile: *+94724423048* >>>>>>> Email: hars...@wso2.com >>>>>>> Blog : http://harshanliyanage.blogspot.com/ >>>>>>> *WSO2, Inc. :** wso2.com <http://wso2.com/>* >>>>>>> lean.enterprise.middleware. >>>>>>> >>>>>>> On Tue, Jun 14, 2016 at 1:42 PM, Geeth Munasinghe <ge...@wso2.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> I think we should make relevant changes in APIs to send 200 status >>>>>>>> code for no content responses. This should only be done if the request >>>>>>>> is >>>>>>>> with query or form params, but not for request with path parameters >>>>>>>> (Which >>>>>>>> is an exact resource, should return 404). >>>>>>>> >>>>>>>> Thanks >>>>>>>> Geeth >>>>>>>> >>>>>>>> >>>>>>>> *G. K. S. Munasinghe* >>>>>>>> *Senior Software Engineer,* >>>>>>>> *WSO2, Inc. http://wso2.com <http://wso2.com/> * >>>>>>>> *lean.enterprise.middleware.* >>>>>>>> >>>>>>>> email: ge...@wso2.com >>>>>>>> phone:(+94) 777911226 >>>>>>>> >>>>>>>> On Tue, Jun 14, 2016 at 11:48 PM, Harshan Liyanage < >>>>>>>> hars...@wso2.com> wrote: >>>>>>>> >>>>>>>>> Hi Geeth, >>>>>>>>> >>>>>>>>> Agreed. In such cases I guess sending 200 with empty body will be >>>>>>>>> more appropriate because there are some cases where the server >>>>>>>>> responds >>>>>>>>> with 204 when the service does not return data (i.e in some DELETE, >>>>>>>>> POST >>>>>>>>> requests). >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Harshan Liyanage >>>>>>>>> Senior Software Engineer >>>>>>>>> Mobile: *+94724423048* >>>>>>>>> Email: hars...@wso2.com >>>>>>>>> Blog : http://harshanliyanage.blogspot.com/ >>>>>>>>> *WSO2, Inc. :** wso2.com <http://wso2.com/>* >>>>>>>>> lean.enterprise.middleware. >>>>>>>>> >>>>>>>>> On Tue, Jun 14, 2016 at 12:42 PM, Geeth Munasinghe <ge...@wso2.com >>>>>>>>> > wrote: >>>>>>>>> >>>>>>>>>> Hi Ayyoob >>>>>>>>>> >>>>>>>>>> On Tue, Jun 14, 2016 at 11:01 PM, Ayyoob Hamza <ayy...@wso2.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Yes I agree with Harshan, >>>>>>>>>>> >>>>>>>>>>> It is a question about whether we are looking this as a resource >>>>>>>>>>> or an endpoint. We should look at the url in the resource >>>>>>>>>>> context(restful >>>>>>>>>>> approach) even though it is built on top of http. Therefore IMO we >>>>>>>>>>> need to >>>>>>>>>>> think that we are mapping a resource to the url and therefore >>>>>>>>>>> suitable >>>>>>>>>>> response would be 404. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> /devices/{device_idenitifier} - this should return 404 if >>>>>>>>>> requested for non-existence device. I have no argument about it. But >>>>>>>>>> my >>>>>>>>>> concern is at /devices?{query_parameter}. This is different. Actual >>>>>>>>>> resource is /devices, but it returns no content due to filtering >>>>>>>>>> criteria >>>>>>>>>> associated with query parameters, That is, in my opinion is a valid >>>>>>>>>> request >>>>>>>>>> which deserves a 200 or 204 response code. >>>>>>>>>> >>>>>>>>>> Thanks >>>>>>>>>> Geeth >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>>> -- >>>>> *Dilan U. Ariyaratne* >>>>> Senior Software Engineer >>>>> WSO2 Inc. <http://wso2.com/> >>>>> Mobile: +94766405580 <%2B94766405580> >>>>> lean . enterprise . middleware >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> With Regards, >>>> >>>> *Rasika Perera* >>>> Software Engineer >>>> M: +94 71 680 9060 E: rasi...@wso2.com >>>> LinkedIn: http://lk.linkedin.com/in/rasika90 >>>> >>>> WSO2 Inc. www.wso2.com >>>> lean.enterprise.middleware >>>> >>> >>> >> > > > -- > With Regards, > > *Rasika Perera* > Software Engineer > M: +94 71 680 9060 E: rasi...@wso2.com > LinkedIn: http://lk.linkedin.com/in/rasika90 > > WSO2 Inc. www.wso2.com > lean.enterprise.middleware >
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev