[SQL Server] Envoyer la commande GET, POST, PATCH, DELETE ou PUT vers un service Web de type REST - Première méthode
-- =============================================
-- Author: Zouhaier KHARROUBI
-- Create date: 26/04/2018
-- Description: Envoyer la commande GET, POST, PATCH, DELETE ou PUT vers un service Web de type REST
-- NB : Lorsque le retour du WebService dépasse 800 carctères la fonction la fonction retourne un résultat vide. Pour contourner ce problème il faut interroger le WebService via un package SSIS ou une procédure stockée. Voir les liens ci-dessous.
--Exemple d'utilisation
SELECT Num_Lig,Type_Lig,[URL],Body,Requete,Num_Erreur,Statut,StatusText,ResponseText FROM [dbo].unf_InterrogerServiceWebRest('https://mektaba.info/api/v1/auth/login/','{"userName":"MonLogin","password":"MonMotDePasse"}','post',NULL)
ORDER BY Num_Lig
-- =============================================
CREATE FUNCTION [dbo].[unf_InterrogerServiceWebTraitementRest]
(
-- Add the parameters for the function here
@URL VARCHAR(8000)
,@body VARCHAR(800)
,@Commande VARCHAR(10) -- GET, POST, PATCH, DELETE ou PUT
,@Jeton VARCHAR(8000)=NULL
)
RETURNS @ResultatFinal TABLE
(
Num_Lig INT IDENTITY(1,1)
,Type_Lig CHAR(1) NULL
,[URL] VARCHAR(MAX) NULL
,Body VARCHAR(MAX) NULL
,Requete VARCHAR(MAX) NULL
,Num_Erreur BIGINT NULL
,Statut INT NULL
,StatusText VARCHAR(200) NULL
,ResponseText Varchar(8000) NULL
)
AS
BEGIN
DECLARE @Resultat AS INT
,@Objet AS INT
,@Taille AS INT
,@Statut AS INT
,@StatutText AS VARCHAR(200)
,@ResponseText AS VARCHAR(8000)
SELECT @Taille = LEN(@body)
EXEC @Resultat=sp_OACreate'WinHttp.WinHttpRequest.5.1', @Objet OUT;
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OACreate ''WinHttp.WinHttpRequest.5.1'', ' + CAST(@Objet AS VARCHAR(35)) + ' OUT', @Resultat)
EXEC @Resultat=sp_OAMethod@Objet, 'open', NULL, @Commande,@URL, 'false'
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''open'', NULL, ''' + @Commande + ''',' + @URL+ ', ''false''', @Resultat)
EXEC @Resultat=sp_OAMethod@Objet, 'setRequestHeader', null, 'Content-Type', 'application/json'
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''setRequestHeader'', null, ''Content-Type'', ''application/json''', @Resultat)
--Exec sp_OAMethod @Objet, 'setRequestHeader', null, 'Content-Type', 'application/json-patch+json'
EXEC @Resultat=sp_OAMethod@Objet, 'setRequestHeader', null, 'Content-Length', @Taille
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''setRequestHeader'', null, ''Content-Length'','+ CAST(@Taille AS VARCHAR(35)) , @Resultat)
IF @Jeton IS NOT NULL
BEGIN
EXEC @Resultat=sp_OAMethod@Objet, 'setRequestHeader', null, 'Authorization', @Jeton
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''setRequestHeader'', null, ''Authorization'',' + CAST(@Jeton AS VARCHAR(8000)) , @Resultat)
END
Exec @Resultat=sp_OAMethod@Objet, 'setRequestBody', null, 'Body', @Body
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''setRequestBody'', null, ''Body'', ' + @body, @Resultat)
EXEC @Resultat=sp_OAMethod@Objet, 'send', null, @Body
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''send'', null, '+ @Body, @Resultat)
EXEC @Resultat=sp_OAMethod@Objet, 'Status', @Statut OUTPUT
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''Status'', @Statut OUTPUT', @Resultat)
EXEC @Resultat=sp_OAMethod@Objet, 'StatusText', @StatutText OUTPUT
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''StatusText'', @StatutText OUTPUT', @Resultat)
EXEC @Resultat=sp_OAMethod@Objet, 'responseText', @ResponseText OUTPUT
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OAMethod @Objet, ''responseText'', @ResponseText OUTPUT', @Resultat)
EXEC @Resultat=sp_OADestroy@Objet
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Requete,Num_Erreur)
VALUES ('L',@URL,@Body,'sp_OADestroy ' + CAST(@Objet AS VARCHAR(35)), @Resultat)
INSERT INTO @ResultatFinal(Type_Lig,URL,Body,Statut,StatusText,ResponseText)
VALUES ('D',@URL,@Body,@Statut,@StatutText,@ResponseText)
RETURN
END