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

Reply via email to