Hi, Goood point!. Initially the search was implemented such a way that it returns a list of ids of records that match the query. Now the search method is changed, so it returns the records. So +1 for removing the API #6.
@Sinduja, @Harshan Thanks for the reference links and for the feedback. On Tue, Jan 20, 2015 at 6:52 PM, Harshan Liyanage <hars...@wso2.com> wrote: > Hi Gimantha, > > Could you please explain the use-case for the API #6? IMO there should > not be any operation to fetch a list of records by ids. Instead there could > be an API which sends a list of records as the response for a query. > > For the API #14 you can still use GET method with query strings. I think > you have included start & count parameters to control the pagination. For > that you can use the HTTP range-header [1] or link headers as mentioned in > [2]. > > [1]. http://otac0n.com/blog/2012/11/21/range-header-i-choose-you.html > [2]. https://developer.github.com/v3/#pagination > > Regards, > > Lakshitha Harshan > 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, Jan 20, 2015 at 6:34 PM, Gimantha Bandara <giman...@wso2.com> > wrote: > >> Hi Harshan, >> >> Thanks for the feedback. The list of IDs of the records to be retrieved >> can be too long. So setting a list of ids as a query param is not >> convenient. Even for the Search, we have to pass a query, which can be too >> long. Thats why the post method is used for Search. >> >> Thanks, >> >> On Tue, Jan 20, 2015 at 12:52 PM, Sinthuja Ragendran <sinth...@wso2.com> >> wrote: >> >>> Hi Gimantha, >>> >>> I think following the conventions will be more intuitive to the users, >>> and we should have a proper reason to not follow. And the post request is >>> generally needs to be sent to create the object and the back end is going >>> to decide where to create the tables resource, therefore it should be POST >>> to '/analytics/tables' and message body should be having the table name. If >>> you want to use /analytics/{tableName}, then you should use PUT rather >>> POST [1]. But IMO POST is the most suitable operation for this context. >>> >>> And through out the below given URL patterns, in order to fetch the >>> records from a table, you have used '/analytics/records/{tableName}' url >>> pattern where 'records' is in the middle and it is not the correct data >>> hierarchy and again I feel it's not the convention. Basically tables >>> contains records and not records contains tables. Therefore if we use >>> POST to '/analytics/tables' for create table, then you can use simply >>> user 'analytics/{tableName}' to GET/POST for the tables, IMHO the records >>> is just an additional segment which is not needed to be here. >>> >>> [1] http://restcookbook.com/HTTP%20Methods/put-vs-post >>> >>> Thanks, >>> Sinthuja. >>> >>> On Tue, Jan 20, 2015 at 1:29 AM, Gimantha Bandara <giman...@wso2.com> >>> wrote: >>> >>>> Hi Sinduja, >>>> >>>> Thank you for the feedback. >>>> >>>> On Mon, Jan 19, 2015 at 12:04 PM, Sinthuja Ragendran <sinth...@wso2.com >>>> > wrote: >>>> >>>>> Hi gimantha, >>>>> >>>>> Please see the comments inline. >>>>> >>>>> On Sun, Jan 18, 2015 at 11:24 PM, Gimantha Bandara <giman...@wso2.com> >>>>> wrote: >>>>> >>>>>> Hi, >>>>>> Currently, I am working on $subject. Basically the methods in >>>>>> AnalyticsDataService will be exposed through REST APIs. Please refer to >>>>>> Architecture mail thread "*[Architecture] BAM 3.0 Data Layer >>>>>> Implementation / RDBMS / Distributed Indexing / Search*" for more >>>>>> Details. Following are the supported REST APIs. >>>>>> >>>>>> 1. Create a table >>>>>> *POST /analytics/{tableName}* >>>>>> ; tableName - The name of the table to be created. >>>>>> >>>>> >>>>> IMHO the above should be POST to '/analytics/*tables*' and the >>>>> request content should have the table name as given below. >>>>> { >>>>> "tableName" : "Test" >>>>> } >>>>> >>>> Since the POST takes only the table name, it is straightforward to use >>>> it as a path parameter. >>>> >>>>> >>>>>> 2. Delete a table >>>>>> *DELETE /analytics/{tableName} * >>>>>> ; tableName - The name of the table to be deleted. >>>>>> >>>>> >>>>>> 3. Check if a table exists >>>>>> *GET /analytics/{tableName} * >>>>>> ; tableName - The name of the table being checked. >>>>>> >>>>>> 4. List All the tables >>>>>> *GET /analytics/tables* >>>>>> ;Response will be an JSON array of table names. e.g. [ "table1" , >>>>>> "table2" , "table3" ] >>>>>> >>>>>> 5. Get the records from a table. >>>>>> *GET /analytics/records/{tableName}/{from}/{to}/{start}/{count} * >>>>>> ; tableName - The name of the table from which the records are >>>>>> retrieved. >>>>>> ; from - The starting time to get records from. >>>>>> ; to - The ending time to get records to. >>>>>> ; start - The paginated index from value >>>>>> ; count - The paginated records count to be read >>>>>> ; response - takes the format of the request content of No.7 >>>>>> >>>>> >>>>> Do we need to have 'records' in the URL? I think it's better to have >>>>> */analytics/{tableName}/{from}/{to}/{start}/{count} >>>>> * >>>>> >>>> >>>> "records" is there to avoid conflicts with other contexts. As an >>>> example, If we remove "records", the URL will take the format >>>> "/analytics/{tableName}", which is already a defined REST API. >>>> >>>>> >>>>>> 6. Get the records from a table (By IDs) >>>>>> *POST /analytics/records/{tableName}* >>>>>> ; tableName - The name of the table from which the records are >>>>>> retrieved. >>>>>> ; Content - A List of IDs of the records to be retrieved in the >>>>>> following format. >>>>>> [ "id1" , "id2" , "id3" ] >>>>>> ; response - takes the format of the request content of No.7 >>>>>> >>>>> >>>>> Similarly can we have this as * /analytics/{tableName}?* >>>>> >>>>>> >>>>>> 7. Create records ( can be created in different tables or in the same >>>>>> ) >>>>>> *POST /analytics/records* >>>>>> ; Content - A list of records in json format like in below. >>>>>> [ >>>>>> { >>>>>> "id": "id1", >>>>>> "tenantId": -1234, >>>>>> "tableName": "tableName1", >>>>>> "timestamp": "yyyy-mm-dd hh:mm:ss", >>>>>> "values": >>>>>> { >>>>>> "columnName1": "value1", >>>>>> "columnName2": "value2" >>>>>> } >>>>>> }, >>>>>> { >>>>>> "id": "id2", >>>>>> "tenantId": -1234, >>>>>> "tableName": "tableName2", >>>>>> "timestamp": "yyyy-mm-dd hh:mm:ss", >>>>>> "values": >>>>>> { >>>>>> "columnName1": "value1", >>>>>> "columnName2": "value2" >>>>>> } >>>>>> }, >>>>>> ] >>>>>> >>>>>> 8. Delete records >>>>>> *DELETE /analytics/records/{tableName}/{timeFrom}/{timeTo}* >>>>>> ; tableName - Name of the table from which the records are deleted. >>>>>> ; timeFrom - The starting time to delete records from. >>>>>> ; timeTo - The end time to delete records to. >>>>>> >>>>>> >>>>> Again do we need to have 'records' in the middle? IMHO >>>>> /analytics/{tableName}/{timeFrom}/{timeTo} is better. >>>>> >>>>> 9. Update records >>>>>> *PUT /analytics/records* >>>>>> ; Content - As same as the POST method for creating records >>>>>> >>>>>> 10. Get the record count of table >>>>>> *GET /analytics/count/{tableName}* >>>>>> ; tableName - The name of the table >>>>>> >>>>>> 11. Create Indices for a table >>>>>> *POST /analytics/indices/{tableName}* >>>>>> ; tableName - The name of the table of which the indices are set >>>>>> ; Content - takes the following format. TYPE is one of "INTEGER", >>>>>> "BOOLEAN", "DOUBLE", "STRING", "FLOAT", "LONG" >>>>>> { >>>>>> "indexColumnName1" : "TYPE1", >>>>>> "indexColumnName2" : "TYPE2" >>>>>> } >>>>>> >>>>> >>>>>> 12. get the indices of a table >>>>>> *GET /analytics/indices/{tableName}* >>>>>> ; tableName - The name of the table >>>>>> ; Response will be of the format of the previous POST request's >>>>>> Content. >>>>>> >>>>>> 13. Clear the indices of a table >>>>>> *DELETE /analytics/indices/{tableName}* >>>>>> ; tableName - The name of the table >>>>>> >>>>>> 14. Search records of a table >>>>>> *POST /analytics/search* >>>>>> ; Content - takes the following format >>>>>> { >>>>>> "tableName": "sampleTableName", >>>>>> "language": "sampleLanguageName", >>>>>> "query": "sampleQuery", >>>>>> "start": "start-location-of-the-result", >>>>>> "count": "maximum-number-of-entries-to-return" >>>>>> } >>>>>> >>>>> >>>>> IMHO this should be a GET request. >>>>> >>>> >>>> Here the problem is, that the search method in AnalyticsDataService >>>> takes few parameters. If we are to implement it as a GET, then we will have >>>> to put all the parameters in the URL itself. >>>> >>>>> >>>>> >>>>> Thanks, >>>>> Sinthuja. >>>>> >>>>> >>>>>> If a method does not have a specific response mentioned above, the >>>>>> response will take the following format. >>>>>> >>>>>> { >>>>>> "status" : "statusValue", >>>>>> "message" : "sampleMessage" >>>>>> } >>>>>> >>>>>> Suggestions and feedbacks are appreciated. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> -- >>>>>> Gimanthaa Bandara >>>>>> Software Engineer >>>>>> WSO2. Inc : http://wso2.com >>>>>> Mobile : +94714961919 >>>>>> >>>>>> _______________________________________________ >>>>>> Architecture mailing list >>>>>> Architecture@wso2.org >>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> *Sinthuja Rajendran* >>>>> Senior Software Engineer <http://wso2.com/> >>>>> WSO2, Inc.:http://wso2.com >>>>> >>>>> Blog: http://sinthu-rajan.blogspot.com/ >>>>> Mobile: +94774273955 >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Architecture mailing list >>>>> Architecture@wso2.org >>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>> >>>>> >>>> >>>> >>>> -- >>>> Gimantha Bandara >>>> Software Engineer >>>> WSO2. Inc : http://wso2.com >>>> Mobile : +94714961919 >>>> >>> >>> >>> >>> -- >>> *Sinthuja Rajendran* >>> Senior Software Engineer <http://wso2.com/> >>> WSO2, Inc.:http://wso2.com >>> >>> Blog: http://sinthu-rajan.blogspot.com/ >>> Mobile: +94774273955 >>> >>> >>> >> >> >> -- >> Gimantha Bandara >> Software Engineer >> WSO2. Inc : http://wso2.com >> Mobile : +94714961919 >> > > -- Gimantha Bandara Software Engineer WSO2. Inc : http://wso2.com Mobile : +94714961919
_______________________________________________ Architecture mailing list Architecture@wso2.org https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture