Files
supabase/web/docs/guides/client-libraries.mdx
T
Copple a788003648 Documentation for the new DX (#253)
## What kind of change does this PR introduce?

Updates the docs with the new developer experience: https://deploy-preview-253--supabase.netlify.app/docs

- Documents the new Auth using `gotrue-js`
- Fixes #179 
- Fixes OAuth links https://github.com/supabase/supabase/issues/241#issuecomment-705632335 
- [x] Add docs on Policies

## Additional context

Related PR on `supabase-js` https://github.com/supabase/supabase-js/pull/50

* Updates the docs for the new Auth DX.

* docs: adds docs for subscribing to rows

* Updates all the reads

* Updates all the docs with the new format

* docs: Replaces all { error, data} with data first, because I subjectively think it looks better

* Adds some of the breaking changes to a blog post

* Adds headings

* removes the blog post since it is now in notion

* Adds the Oauth changes

* removes recharts because we no longer use it

* Adds basic structure for GoTrue ref

* Adds styles for the api reference docs

* Adds more generated docs

* Downloads the files to work locally

* Adds a supabase generator

* Moves some of the guides into the "tools" folder

* Re-shuffles some of the pages around

* Generated everythign related to the Supabase Client

* Refactors and categorieses the pages

* Changes the names to be more readable

* Migrates almost all of the filters into the API reference

* Moves most of the stored procedure filters

* Adds realtime-js to the mix

* More desciptive titles

* Moves all the generated docs to the docs folder

* Moves over some of the data manipulators

* Extracts most of the client functionality to the API ref

* Adds more detail to the guides

* Removes the reference to the emulator

* Adds the supabase 1.0 blog post

* Adds a redirects for netlify

* chore: Updates packages

* Updates broken links

* Adding docs for the server

* Adds comments to gotrue and pgapi

* Adds a twitter icon to our navbar

* Updates the auth with the new user and session return values

* Updates the sponsors

* Styles for cards

* Adds a default value to all of the Tabs
2020-11-02 11:08:02 +08:00

310 lines
4.7 KiB
Plaintext
Executable File

---
id: client-libraries
title: Client Libraries
description: 'Supabase provides client libraries in several languages.'
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
The [Supabase Client](/docs/client/supabase-client) makes it simple for developers to build secure and scalable products.
## Auth
Create new users using [`signUp()`](/docs/client/auth-signup).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { error, data } = await supabase.auth.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
Existing users can log in using [`signIn()`](/docs/client/auth-signin).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { error, data } = await supabase.auth.signIn({
email: 'example@email.com',
password: 'example-password',
})
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
If there is an email, but no password passed to [`signIn()`](/docs/client/auth-signin), the user will receive a magic link.
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { error, data } = await supabase.auth.signIn({
email: 'example@email.com'
})
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
Third party logins are also handled through [`signIn()`](/docs/client/auth-signin).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { user, error } = await supabase.auth.signIn({
// provider can be 'github', 'google', 'gitlab', or 'bitbucket'
provider: 'github'
})
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
## Managing data
Since Postgres is a Relational database, the client makes it simple to query tables and fetch related data in one round-trip, using [`select()`](/docs/client/select).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { data, error } = await supabase
.from('countries')
.select(`
name,
cities (
name
)
`)
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
You can do advanced [filtering](/docs/client/using-filters) to extract only the data that you need.
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { data, error } = await supabase
.from('cities')
.select('name, country_id')
.lt('country_id', 100)
.limit(10)
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
You can create data easiely using [`insert()`](/docs/client/insert).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const { data, error } = await supabase
.from('cities')
.insert([
{ name: 'The Shire', country_id: 554 },
{ name: 'Rohan', country_id: 555 },
])
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
## Realtime Changes
The Supabase client makes it simple to listen to realtime database changes, using [`subscribe()`](/docs/client/subscribe).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const mySubscription = supabase
.from('countries')
.on('*', payload => {
console.log('Change received!', payload)
})
.subscribe()
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
You can even [listen to Row Level changes](/docs/client/subscribe#listening-to-row-level-changes).
<Tabs
groupId="libraries"
defaultValue="js"
values={[{ label: 'JavaScript', value: 'js' },{ label: 'Python', value: 'py' }]}>
<TabItem value="js">
```js
const mySubscription = supabase
.from('countries:id.eq.200')
.on('UPDATE', handleRecordUpdated)
.subscribe()
```
</TabItem>
<TabItem value="py">
```py
# Not yet implemented
```
</TabItem>
</Tabs>
## Next steps
- View the [Client Docs](/docs/client/supabase-client)
- Sign in: [app.supabase.io](https://app.supabase.io)