Agreed. Then again, if user needs to include more columns than he needs to
exclude we can introduce something like below and use the most suitable
depending on the length.

service?*include*=column1,column2    *- only include columns specified by
user*
service?*exclude*=column1,column2   *- include all columns, excluding what
is provided by user*

Then again, there are even lower level limitations such as InnoDB limit on
maximum 1000 columns [2].

If we really have such as use case where this list can grow more than 2000
characters, maybe it is best to use POST only for such abnormal scenarios.

[1]
http://stackoverflow.com/questions/15090220/maximum-length-for-url-in-chrome-browser
[2] http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

On Thu, Mar 24, 2016 at 12:03 PM, Udara Liyanage <ud...@wso2.com> wrote:

> Hi,
>
> IMO by using POST to do a GET  we are violating REST principals and may
> confuse users. You can see a query type API in [1] used by StackOverflow
> API. According to [2], it seems  about 2000 characters are allowed  most
> browsers which is a pretty large number where a normal GET request is
> highly unlikely to exceed in practical situation regardless of the number
> of fields exist.
>
>
> [1] https://api.stackexchange.com/docs/users
> [2]
> http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers
>
> On Thu, Mar 24, 2016 at 11:38 AM, Gimantha Bandara <giman...@wso2.com>
> wrote:
>
>> Thank you for your suggestions.
>> We cannot exactly say that the number of columns/fields user will need.
>> It depends on how many fields a table has and how many the user want to get
>> from that table. So the url length might exceed. If so, we will have to go
>> with a new method with POST as it seems the only option.
>>
>> On Wed, Mar 23, 2016 at 9:34 PM, Lahiru Sandaruwan <lahi...@wso2.com>
>> wrote:
>>
>>> Yes, if it is possible to put the columns names in the url as Ayoma
>>> mentioned, we must use that(First i thought it is a complex payload you
>>> want to send).
>>>
>>> Unless there are limitations, like column list doesn't exceed the url
>>> length limits, we should use GET.
>>>
>>> Thanks.
>>>
>>> On Wed, Mar 23, 2016 at 3:54 PM, Ayoma Wijethunga <ay...@wso2.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> It is true that using GET request with a payload is not the best
>>>> option. Even though it is not strictly prohibited in specs, it can be
>>>> confusing [1]. REST architecture is very open about how we use HTTP
>>>> methods, but thinking in terms of REST architecture, I do not think using
>>>> POST is also the correct approach here [2] (maybe it is just the personal
>>>> preference).
>>>>
>>>> Let me summaries few examples on how others have addressed the same
>>>> requirement with GET requests.
>>>>
>>>> Facebook Graph API is using "field" query parameter for this [3]. For
>>>> example :
>>>>
>>>> Following Graph API call 
>>>> *https://graph.facebook.com/bgolub?fields=id,name,picture
>>>>> <https://graph.facebook.com/bgolub?fields=id,name,picture>* will only
>>>>> return the id, name, and picture in Ben's profile
>>>>>
>>>>
>>>> SharePoint syntax is not very eye candy [4][5], but it goes like :
>>>>
>>>>
>>>>> http://server/siteurl/_vti_bin/listdata.svc/DocumentsOne?$select=MyDocumentType,Title,Id&$expand=MyDocumentType
>>>>>
>>>>
>>>> YouTube API has the same in below form [6] :
>>>>
>>>> Example 1: Retrieve number of items in feed, index of
>>>>> first item in result set, and all entries in the feed:
>>>>>     fields=openSearch:totalResults,openSearch:startIndex,entry
>>>>>
>>>>
>>>> LinkedIn has the same [7]
>>>>
>>>>
>>>>> https://api.linkedin.com/v1/people-search:(people:(id,first-name,last-name,positions:(id,title,summary,start-date,end-date,is-current,company:(id,name,type,size,industry,ticker))
>>>>>
>>>>
>>>> IMO Facebook Graph API has the cleanest mechanism.
>>>>
>>>> I believe that if we use a similar format we will not have to introduce
>>>> new resource paths. Instead we'll be able to provide all the columns,
>>>> unless user specifically request limited set of fields with a query
>>>> parameter. WDYT?
>>>>
>>>> [1]
>>>> http://stackoverflow.com/questions/5216567/is-this-statement-correct-http-get-method-always-has-no-message-body
>>>> [2] https://spring.io/understanding/REST
>>>> [3]
>>>> https://developers.facebook.com/docs/graph-api/using-graph-api#fieldexpansion
>>>> [4]
>>>> http://sharepoint.stackexchange.com/questions/118633/how-to-select-and-filter-list-items-lookup-column-with-sharepoint-2013-rest-feat
>>>> [5]
>>>> http://platinumdogs.me/2013/03/14/sharepoint-adventures-with-the-rest-api-part-1/
>>>> [6]
>>>> https://developers.google.com/youtube/2.0/developers_guide_protocol_partial#Fields_Formatting_Rules
>>>> [7] https://developer.linkedin.com/docs/fields?u=0
>>>>
>>>> Best Regards,
>>>> Ayoma.
>>>>
>>>> On Wed, Mar 23, 2016 at 8:13 PM, Lahiru Sandaruwan <lahi...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I think using a POST with a body, for retrieving information is fine
>>>>> considering the requirement. GET with body is not recommended.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> On Wed, Mar 23, 2016 at 2:31 PM, Gimantha Bandara <giman...@wso2.com>
>>>>> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>>
>>>>>> We have a REST API in DAS to retrieve records in a specific table. It
>>>>>> supports GET method with the following url format.
>>>>>>
>>>>>> /analytics/tables/{tableName}/{from}/{to}/{start}/{count}
>>>>>>
>>>>>> Sending a GET request to above url will give the records between
>>>>>> given "from", "to" time range starting from index "start" with  "count"
>>>>>> page size.
>>>>>>
>>>>>> Now we need to change the API, so that the user can define the record
>>>>>> columns/fields he wants. Current API will return the records with all the
>>>>>> values/columns. To do that, we can allow the user to define the columns 
>>>>>> he
>>>>>> needs, in the payload. But it seems that having a payload with a GET is 
>>>>>> not
>>>>>> the convention/the best practice.
>>>>>>
>>>>>> POST can be used to send the column names as a payload, but here we
>>>>>> are not making any updates to {tableName} resource. We will be just
>>>>>> retrieving records using a POST. So it also seems not the convention/the
>>>>>> best practice.
>>>>>>
>>>>>> The only solution I can think of is, having a different resource path
>>>>>> to get the records with only specified fields/columns. Are there any 
>>>>>> other
>>>>>> solutions?
>>>>>>
>>>>>> Thanks,
>>>>>> Gimantha
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Architecture mailing list
>>>>>> architect...@wso2.org
>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> --
>>>>> Lahiru Sandaruwan
>>>>> Committer and PMC member, Apache Stratos,
>>>>> Senior Software Engineer,
>>>>> WSO2 Inc., http://wso2.com
>>>>> lean.enterprise.middleware
>>>>>
>>>>> phone: +94773325954
>>>>> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/
>>>>> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> Dev@wso2.org
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Ayoma Wijethunga
>>>> Software Engineer
>>>> WSO2, Inc.; http://wso2.com
>>>> lean.enterprise.middleware
>>>>
>>>> Mobile : +94 (0) 719428123 <+94+(0)+719428123>
>>>> Blog : http://www.ayomaonline.com
>>>> LinkedIn: https://www.linkedin.com/in/ayoma
>>>>
>>>
>>>
>>>
>>> --
>>> --
>>> Lahiru Sandaruwan
>>> Committer and PMC member, Apache Stratos,
>>> Senior Software Engineer,
>>> WSO2 Inc., http://wso2.com
>>> lean.enterprise.middleware
>>>
>>> phone: +94773325954
>>> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/
>>> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146
>>>
>>>
>>> _______________________________________________
>>> Architecture mailing list
>>> architect...@wso2.org
>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>
>>>
>>
>>
>> --
>> Gimantha Bandara
>> Software Engineer
>> WSO2. Inc : http://wso2.com
>> Mobile : +94714961919
>>
>> _______________________________________________
>> Architecture mailing list
>> architect...@wso2.org
>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>
>>
>
>
> --
>
> Udara Liyanage
> Software Engineer
> WSO2, Inc.: http://wso2.com
> lean. enterprise. middleware
>
> web: http://udaraliyanage.wordpress.com
> phone: +94 71 443 6897
>
> _______________________________________________
> Architecture mailing list
> architect...@wso2.org
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>
>


-- 
Ayoma Wijethunga
Software Engineer
WSO2, Inc.; http://wso2.com
lean.enterprise.middleware

Mobile : +94 (0) 719428123 <+94+(0)+719428123>
Blog : http://www.ayomaonline.com
LinkedIn: https://www.linkedin.com/in/ayoma
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to