Tutoriel : Implémentation de votre première ressource RAD Server

De RAD Studio
Aller à : navigation, rechercher

Remonter à Présentation des ressources de RAD Server


Vous pouvez créer une nouvelle ressource sur le serveur EMS en créant un package EMS.

Pour créer un nouveau package Delphi :

  1. Choisissez Fichier > Nouveau > Autre.
  2. Choisissez Projets Delphi > EMS > Package EMS.
  3. Sélectionnez Créer un package avec la ressource et cliquez sur Suivant.
  4. Entrez "Test" comme nom de ressource.
  5. Pour cet exemple, vous pouvez sélectionner Module de données ou Unité.
  6. Cliquez sur Suivant.
  7. Sélectionnez Get et GetItem, puis cliquez sur Terminer.

Dans l'unité ajoutée à votre projet, ajoutez le code suivant :

Créez une nouvelle fonction :

  • Pour Delphi :
type
  [ResourceName('Test')]
  TTestResource1 = class(TDataModule)
  private
    // Declare the function
    function MakeJSON(I: Integer): TJSONObject; //It takes an integer as a parameter and returns a JSON Object.
  published
    procedure Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
    [ResourceSuffix('{item}')]
    procedure GetItem(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
  end;
  • Pour C++ (dans le fichier Unit1.h) :
class TTestResource1 : public TDataModule
{
__published:
private:
	TJSONObject* MakeJSON(int I);
public:
	__fastcall TTestResource1(TComponent* Owner);
	void Get(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse);
	void GetItem(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse);
};

Utilisez Achèvement de classe en appuyant sur CTRL-MAJ-C pour créer un stub pour cette fonction dans la section implementation.

Ecrivez le code pour la fonction que vous venez d'ajouter :

  • Pour Delphi :
function TTestResource1.MakeJSON(I: Integer): TJSONObject;
begin
  Result := TJSONObject.Create; 
  Result.AddPair('index', TJSONNumber.Create(I)); //Adds to the JSON object a pair {"index": I}, the index number.
  Result.AddPair('value', TJSONString.Create(TestValues[I])); //Adds to the the JSON object a pair {"value":String}, the string corresponding to the index number. 
end;
  • Pour C++ (dans le fichier Unit1.cpp) :
TJSONObject* TTestResource1::MakeJSON(int I) {
	TJSONObject *result = new TJSONObject();
	result->AddPair(new TJSONPair("index", new TJSONNumber(I)));
	result->AddPair(new TJSONPair("value", new TJSONString(TestValues[I])));
	return result;
}

Incluez les constantes sous une instruction uses dans la section implementation :

  • Pour Delphi :
const
  TestValues: array [0 .. 2] of string = ('a', 'b', 'c'); // It creates an array of string values.
  • Pour C++ (dans le fichier Unit1.cpp) :
 const char* TestValues[] = { "a", "b", "c" };

Ecrivez le code pour le point de terminaison Get :

  • Pour Delphi :
procedure TTestResource1.Get(const AContext: TEndpointContext;
  const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
var
  LJSON: TJSONArray;
  I: Integer;
begin
  LJSON := TJSONArray.Create; 
  for I := Low(TestValues) to High(TestValues) do 
    LJSON.Add(MakeJSON(I)); //[{"index":0,"value":"a"},{"index":1,"value":"b"},{"index":2,"value":"c"}]
  AResponse.Body.SetValue(LJSON, True) // True causes AResponse to free JSON

end;
  • Pour C++ (dans le fichier Unit1.cpp) :
void TTestResource1::Get(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse) {
	int I;
	TJSONArray *LJSON = new TJSONArray();
	int TestValuesSize = sizeof(TestValues) / sizeof(TestValues[0]);
	for (I = 0; I < TestValuesSize; I++) {
		LJSON->Add(MakeJSON(I));
	}
	AResponse->Body->SetValue(LJSON, true);
}

Ecrivez le code pour le point de terminaison GetItem :

  • Pour Delphi :
procedure TTestResource1.GetItem(const AContext: TEndpointContext;
  const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
var
  I: Integer;
begin
  if not TryStrToInt(ARequest.Params.Values['item'], I) then //{"index":I,"value":value}
    AResponse.RaiseBadRequest('Index expected');
  if (I < 0) or (I >= Length(TestValues)) then
    AResponse.RaiseBadRequest('Index out of range');
  AResponse.Body.SetValue(MakeJSON(I), True);
  // True causes AResponse to free JSON
end;
  • Pour C++ (dans le fichier Unit1.cpp) :
void TTestResource1::GetItem(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse) {
	String item;
	int I = 0;
	int TestValuesSize = sizeof(TestValues) / sizeof(TestValues[0]);
	item = ARequest->Params->Values["item"];
	if (!(TryStrToInt(item, I))) {
		AResponse->RaiseBadRequest("Index expected");
	}
	else {
		if ((I < 0) || (I >= TestValuesSize))
			AResponse->RaiseBadRequest("Index out of range");
		else
			AResponse->Body->SetValue(MakeJSON(I), true);
	}

}

Test de la nouvelle ressource

Pour tester votre projet sur un environnement de développeur :

  1. Choisissez Exécuter > Paramètres.
  2. Contrôlez le champ Application hôte pour voir si le chemin d'accès à l'exécutable du serveur EMS est correct. Le chemin d'accès est C:\Program Files (x86)\Embarcadero\Studio\21.0\bin\EMSDevServer.exe.
  3. Exécutez le projet ; la fenêtre du serveur s'ouvre.

Sur un navigateur, entrez les URL suivantes :

  http://localhost:8080/test/  //It uses the Get() endpoint to get all the JSON array
  http://localhost:8080/test/1//It uses the GetItem() endpoint to get the first item of the array.
  http://localhost:8080/test/2
  http://localhost:8080/test/3
  <localhost>:<port_number>/resource/parameter
  <ip_address>:<port_number>/resource/parameter

Voir aussi