Seems like the bigger issue here is that resource collection is not being a path parameter.
/devices/type=android -> not ideal, there is no good way to distinguish non-existing types /devices/android -> seems to be more REST like On Wed, Jun 15, 2016 at 5:17 AM, Joseph Fonseka <jos...@wso2.com> wrote: > Hi All > > In AM what we practice is that collection resource will return 200 Ok with > an empty body ( empty array in JSON ) if the collection or query result is > empty. > > IMO the key is 200 status denote the sent result is valid and you use the > empty body to convey the collection / query result is empty. > > For resources like /devices/{Id} will return 404 if the resource is not > found. > > Regards > Jo > > > On Wed, Jun 15, 2016 at 12:26 PM, Chathura Dilan <chathu...@wso2.com> > wrote: > >> Yes >> >> Take an API like /devices and if there are no records in it, return an >> empty array. In this case the collection there is empty but it does exist. >> So we cannot return 404 and use 200 instead. >> If it is an single resource like devices/{deviceId} and if it is not >> found return 404, because it does not exist. >> >> >> On Wed, Jun 15, 2016 at 11:42 AM, Ruwan Yatawara <ruw...@wso2.com> wrote: >> >>> However, as per the implementation, since what is drawn from '/devices' >>> is a list of resources.. and not an individual device. I believe a 200 ok >>> with an empty set is acceptable. >>> >>> >>> 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:26 AM, Ruwan Yatawara <ruw...@wso2.com> >>> wrote: >>> >>>> 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 >>>>> >>>> >>>> >>> >> >> >> -- >> Regards, >> >> Chatura Dilan Perera >> *Associate Tech Lead** - WSO2 Inc.* >> www.dilan.me >> > > > > -- > > -- > *Joseph Fonseka* > WSO2 Inc.; http://wso2.com > lean.enterprise.middleware > > mobile: +94 772 512 430 > skype: jpfonseka > > * <http://lk.linkedin.com/in/rumeshbandara>* > > > _______________________________________________ > Dev mailing list > Dev@wso2.org > http://wso2.org/cgi-bin/mailman/listinfo/dev > > -- With regards, *Manu*ranga Perera. phone : 071 7 70 20 50 mail : m...@wso2.com
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev