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

Reply via email to