gristlabs / grist-core

Grist is the evolution of spreadsheets.
https://www.getgrist.com
Apache License 2.0
7.33k stars 326 forks source link

Stream endpoints #192

Open Vladimir-Va opened 2 years ago

Vladimir-Va commented 2 years ago

There are many applications where we need to direct access data from Grist without using the REST API. I propose to consider adding such a concept as Stream endpoints Generate a unique link for the current user http://grist.app/[team]/[workspace]/[doc]/[table]/[user_UUID_hash]/format=csv For direct write or read data from tables. What do you think about this?

paulfitz commented 2 years ago

Hi @Vladimir-Va, are you asking for an endpoint that can accept data in csv format? Your link appears to be to a section about some 256 character limit in Excel? What kind of authentication method are you interested in? From the [user_UUID_hash] in your example it sounds like you might want something like public link-sharing, where the endpoint is publicly accessible but has a hard-to-guess code in it?

Vladimir-Va commented 2 years ago

Hello @paulfitz, thank you. Client API: How to Integrate with Excel I am looking for a way to synchronize remote database and data on PC. For example one of the services offers an application to synchronize data on a local PC Pyrus Sync. But I found the approach offered by RavenDB worthy of attention. Indeed, if you think about it, then in the proposed version http://grist.app/[team]/[workspace]/[doc]/[table]/[user_UUID_hash]/format=csv there is a flaw. Better is http://grist.app/[stream_UUID]/format/csv It looks like public link-sharing, but to send a unique link with an individual setting of access rights for the recipient of the link and the ability for the recipient to select the format as .sqlite/.xls/.cvs/.grist (format what we have API /docs/{docId}/download).

For example: I need to pass a permalink with data for a user without an API key with the columns he needs, the rows filtered and sorted for this link. To do this, I go to Access Rules. I create a block with a generated new link with [stream_UUID]. In this block, I set [stream_SLUG] (any text for filename), set life time for link, select the document, table, columns and data for filtering and sorting rows with SetAsID/Read/Update/Write access.

Hypothetically, this would help when exchanging data in tables between Grist documents of the user himself (periodically there are questions on the forum).