IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

PostgREST, mettre en place une API RestFull depuis n'importe quelle base de données PostgreSQL,
Un tutoriel de Gérard Ernaelsten

Le , par MaitrePylos

8PARTAGES

5  0 
Bonjour,

Je vous présente un nouvel article expliquant comment mettre en place facilement une API REST au départ de n'importe quelle base de données PostgreSQL avec l'outil PostgREST:

PostgREST, mettre en place une API RestFull depuis n'importe quelle base de données PostgreSQL

En vous souhaitant une bonne lecture.

Retrouvez les meilleurs cours et tutoriels pour apprendre le SGBD PostgreSQL

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de MaitrePylos
Modérateur https://www.developpez.com
Le 13/02/2020 à 16:23
Bonjour,
Pour autant que le rôle définit dans la base de données permet d'activer une procédure stockée, alors celui-ci pourras exécuter.
C'est le même principe que le login que je décris dans l'article.
Votre procédure/fonction sera alors placée dans une route rpc
1  0 
Avatar de Anselme45
Membre extrêmement actif https://www.developpez.com
Le 13/02/2020 à 16:08
L'article démontre comment l'API PostgREST permet de faire de la requête SQL sur une base de données postgresql à partir d'applications mobiles.

Qu'en est-il au sujet des procédures stockées?

Si l'architecture de la base de données comprend non seulement des tables mais également des procédures stockées, est-ce que l'on peut activer ces procédures stockées via l'API PostgREST ou doit-on les remplacer par une approche "requête SQL"?

Merci encore à l'auteur du tuto.
0  0 
Avatar de Anselme45
Membre extrêmement actif https://www.developpez.com
Le 14/02/2020 à 15:32
Merci pour l'info...
0  0 
Avatar de IchCodes
Candidat au Club https://www.developpez.com
Le 19/01/2024 à 19:39
Bonjour,

Merci pour ce tutoriel, il m'as pas mal facilité.

Cependant je me demande si cela est normal que login soit mentionné avec brain:

Code : Sélectionner tout
1
2
3
4
5
6
7
8
ALTER FUNCTION brain.login(text, text)
    OWNER TO postgres;

GRANT EXECUTE ON FUNCTION brain.login(text, text) TO postgres;

GRANT EXECUTE ON FUNCTION brain.login(text, text) TO PUBLIC;

GRANT EXECUTE ON FUNCTION brain.login(text, text) TO anonymous;
Si on suit le tutoriel on a creer la fonction dans le schema public:

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CREATE OR REPLACE FUNCTION public.login(
    pseudo text,
    pass text)
    RETURNS basic_auth.jwt_token
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE SECURITY DEFINER 
AS $BODY$
declare
  _role name;
  result basic_auth.jwt_token;
begin
  -- check email and password
  select basic_auth.user_role(pseudo, pass) into _role;
  if _role is null then
    raise invalid_password using message = 'invalid user or password';
  end if;

  select sign(
      row_to_json(r), current_setting('public.jwt_secret')
    ) as token
    from (
      select _role as role, login.pseudo as pseudo,
         extract(epoch from now())::integer + 60*60 as exp
    ) r
    into result;
  return result;
end;
$BODY$;
On devrait donc plutôt avoir ceci non ? :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
ALTER FUNCTION public.login(text, text)
    OWNER TO postgres;

GRANT EXECUTE ON FUNCTION public.login(text, text) TO postgres;

GRANT EXECUTE ON FUNCTION public.login(text, text) TO PUBLIC;

GRANT EXECUTE ON FUNCTION public.login(text, text) TO anonymous;
Je suis pas fort en sql je voulais donc être sûr, car cela génère une erreur de mon côté.

Merci d'avance pour ton aide !
0  0 
Avatar de MaitrePylos
Modérateur https://www.developpez.com
Le 20/01/2024 à 13:36
Oups bien vu.
J'ai mélangé le tuto fais pour le boulot avec celui-ci.
Tu as raison, la fonction est bien dans public.
0  0 
Avatar de IchCodes
Candidat au Club https://www.developpez.com
Le 21/01/2024 à 20:19
Citation Envoyé par MaitrePylos Voir le message
Oups bien vu.
J'ai mélangé le tuto fais pour le boulot avec celui-ci.
Tu as raison, la fonction est bien dans public.
Merci pour ton retour ^^

Cependant j'ai un souci, quand je revoke les droits a anonymous le fait de faire une requête sans token fonctionne toujours ...
Je me suis rendu compte que le fait d'avoir
Code : Sélectionner tout
 GRANT readall TO anonymous;
fait que meme si anonymous a tous les droits revoked il switch automatiquement sur readall, une erreu au niveau du tutoriel ou j'ai fait mal quelque chose ?
Comment je peux régler cela svp ?
0  0 
Avatar de IchCodes
Candidat au Club https://www.developpez.com
Le 21/01/2024 à 22:02
Citation Envoyé par MaitrePylos Voir le message
Oups bien vu.
J'ai mélangé le tuto fais pour le boulot avec celui-ci.
Tu as raison, la fonction est bien dans public.
Citation Envoyé par IchCodes Voir le message
Merci pour ton retour ^^

Cependant j'ai un souci, quand je revoke les droits a anonymous le fait de faire une requête sans token fonctionne toujours ...
Je me suis rendu compte que le fait d'avoir
Code : Sélectionner tout
 GRANT readall TO anonymous;
fait que meme si anonymous a tous les droits revoked il switch automatiquement sur readall, une erreu au niveau du tutoriel ou j'ai fait mal quelque chose ?
Comment je peux régler cela svp ?
J'ai fini par trouver.
Dans le tutoriel on donne la possibilité à anonymous de changer de rôle :

Code : Sélectionner tout
GRANT readall TO anonymous;
Or il faut donner a authenticator la possibilité de changer de role :

Code : Sélectionner tout
GRANT readall TO authenticator;
Pour le reste tout fonctionne, merci pour ce tutoriel qui m'as énormément facilité !
0  0