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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

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


Sujet :

PostgreSQL

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 593
    Points
    12 593
    Par défaut PostgREST, mettre en place une API RestFull depuis n'importe quelle base de données PostgreSQL
    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

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 739
    Points : 5 623
    Points
    5 623
    Par défaut
    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.

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 593
    Points
    12 593
    Par défaut
    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

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 739
    Points : 5 623
    Points
    5 623
    Par défaut
    Merci pour l'info...

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2024
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Mise en place JWT
    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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 !

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 593
    Points
    12 593
    Par défaut
    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.

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2024
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    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 - Visualiser dans une fenêtre à part
     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 ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2024
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    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 - Visualiser dans une fenêtre à part
     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 - Visualiser dans une fenêtre à part
    GRANT readall TO anonymous;
    Or il faut donner a authenticator la possibilité de changer de role :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT readall TO authenticator;
    Pour le reste tout fonctionne, merci pour ce tutoriel qui m'as énormément facilité !

Discussions similaires

  1. [Encodage] Sécuriser une requête vers une API RESTfull
    Par tenjy dans le forum Langage
    Réponses: 1
    Dernier message: 27/08/2018, 23h47
  2. Symfony et une Api RestFull
    Par SebAlka dans le forum Symfony
    Réponses: 1
    Dernier message: 07/03/2017, 12h45
  3. Appeler une api Rest depuis un serveur d'application
    Par marc11 dans le forum Java EE
    Réponses: 1
    Dernier message: 25/02/2013, 11h25
  4. Réponses: 3
    Dernier message: 24/06/2009, 18h59
  5. Mise à jour d'une une table sql depuis table importée
    Par Yohann_x dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/03/2006, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo