1. #1
    Membre habitué

    Profil pro
    Inscrit en
    mai 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2003
    Messages : 80
    Points : 141
    Points
    141
    Billets dans le blog
    1

    Par défaut Interroger une base de données depuis javascript

    Bonjour,

    Pouvez-vous me dire si ça vous semble réalisable ?

    Ce que j'ai aujourd'hui :

    Je développe une application Web .NET qui utilise majoritairement le <canvas> (html5) pour sa partie graphique.

    La base de données est en SQL Server et l'application Web est du ASP.NET Framework en mode 'Single Page Application'.

    Il y a donc qu'une seule page, et les données sont récupérés par des appels Javascripts qui interrogent des WebApi... qui eux-même utilisent Entity Framework... qui utilise ma base de données.

    Jusqu'ici, je suis compréhensible ?

    En schéma ça donnerait ça :
    Nom : 2017-10-11 15_03_59-Présentation1 - PowerPoint.png
Affichages : 41
Taille : 15,3 Ko

    Aujourd'hui, j'ai autant de WebAPI que de tables principales, et c'est un peu lourd je trouve.
    Dès que je créé une table, j'actualise le modèle objet Entity (là c'est automatique, pas de souci), puis je suis obligé de créer une nouvelle WebAPI, puis des nouveaux Appels Ajax, puis mettre à jour mes objets javascripts.

    Alors voici l'idée :
    Pourrais-je développer une Web Api 'générique' qui accepte tout type de requête (update, select, delete) et sur toutes les tables disponibles ?
    L'idée est que je puisse écrire ma requête directement dans le code javascript (selon une norme à définir) pour enlever toute l'intelligence des WebAPI (... et la nécessité de les maintenir).
    Mes WebAPI sont déjà protégés pour ne pouvoir être utilisé que par l'application, et je n'ai que faire que mon code soit lisible par autrui.

    Je suis intéressé par toutes vos remarques,

    Cordialement,
    Stève

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    12 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 12 872
    Points : 23 197
    Points
    23 197

    Par défaut

    niveau sécurité tu n'as pas de contraintes ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    mai 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2003
    Messages : 80
    Points : 141
    Points
    141
    Billets dans le blog
    1

    Par défaut

    Pas de contrainte de sécurité, uniquement de productivité pour l'instant.
    Ce n'est pas une application dédiée à être ouverte sur le web.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    12 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 12 872
    Points : 23 197
    Points
    23 197

    Par défaut

    parce que faire passer une requete à l'api ca permettrait de faire passer n'importe quoi genre select * from sys.tables et tout le reste par la suite pour tout pirater

    après avec entity framework je ne sais pas trop comment tu peux t'en sortir, mais avec des requetes SQL direct c'est en effet faisable
    par contre tu perds l'avantage d'EF qui est d'avoir du code généré par table et rempli automatiquement, et faire tes poco toi même ca sera plus chiants que te taper les requetes linq EF et d'écrire un point d'entrée API je pense

    sinon il faudrait faire abstraction de l'objet mais transmettre des choses plus simples, genre un tableau de nom_colonne/valeur
    (le sql datareader permet de récupérer les noms de colonnes dynamiquement)
    si tu veux camoufler un peu la structure de la base, tu peux aussi faire des vues, tu transmets alors le nom de la vue, ca a aussi l'avantage que tu peux changer la vue sans modifier le code JS
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    mai 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2003
    Messages : 80
    Points : 141
    Points
    141
    Billets dans le blog
    1

    Par défaut

    Merci de ta réponse Pol63

    En effet, le principe des vues me permet d'augmenter la sécurité.

    Pour éviter les "select * from sys.tables", il me suffit de gérer les droits proprement au niveau du compte de service IIS qui accède à la base de données.

    Sinon, mes recherches m'ont menés à étudier "Dynamic Linq" pour générer des requêtes LINQ dynamiquements mais c'est plus complexe que : <string> génère <requête linq>
    J'hésite à introduire cette nouvelle couche de complexité.

    Je pourrais également passer par un tableau Excel : X feuilles pour X tables, avec des jeux de données de test ; et une "petite" macro qui génère :
    1) les scripts SQL de création des tables et des contraintes associés (un maximum de contrainte, ce serait les seuls contrôles côté serveur)
    2) le remplissage de ces tables avec les données de test
    3) la génération des WebPI avec des requêtes linq "standards" : get / post / put / delete
    avec l'idée de rendre variable uniquement les colonnes retournées, et les conditions avec une transco de ce type : A et (B ou C) = [0,[A,true],[1,[B,true],[C,true]]
    4) la génération des appels Ajax, avec les contraintes associés côté javascript

    Avec ça, j'ai du clic-bouton pour générer une architecture cohérente et modulaire.
    Même si ça peut paraître compliqué, ça reste de la manipulation de chaîne, avec des replaces, et des boucles.

    Je continue un peu avec mon schéma actuel avant de me lancer là dedans.

  6. #6
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    février 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : février 2013
    Messages : 119
    Points : 203
    Points
    203
    Billets dans le blog
    1

    Par défaut

    Bonjour ,
    Regardes ODATA ca pourrait être une piste pour toi . Sinon regardes plutôt des templates déjà existant pour ce genre d application à ce niveau c est des soucis d architecture que t as ce qui est normal vu que ton appli grossi .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/12/2015, 19h11
  2. Insérer dans une base de données depuis le code JavaScript
    Par zakarinalaw dans le forum JavaScript
    Réponses: 1
    Dernier message: 16/02/2014, 11h46
  3. Supprimer une Base de Données depuis ASP .NET
    Par moumoune65 dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 10/08/2006, 11h22
  4. Connection à une base de données depuis excell
    Par snooopy007 dans le forum Access
    Réponses: 1
    Dernier message: 14/07/2006, 22h30
  5. Lien avec une base de donnée en javascript
    Par nissarti dans le forum JavaScript
    Réponses: 3
    Dernier message: 13/03/2006, 19h05

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