ApexクラスとメソッドをREST Webサービスとして公開する方法の概要

6649 ワード

この記事では、ApexクラスとメソッドをREST Webサービスとして公開する方法の概要を説明します.この記事はまた、クラス&メソッドの注釈について知っているのに役立ちます.
アペックスウェブサービスへの導入
  • の頂点ウェブサービス
  • ウェブサービスを公開する
  • の呼び出しアウト
  • Apex Webサービス入門


    ビジネスロジックを持つApexクラスはWebサービスに公開されます.外部アプリは、これらのWebサービスを起動し、ビジネスプロセスのワークフローを実行します.
    外部Webサービスはまた、Apexコードから呼び出すことができます.この呼び出しは、SOAPおよびWSDLサービス(RESTful Webサービス)を使用して実行されます.この呼び出しプロセスはコールアウトと呼ばれます.

    頂点ウェブサービス


    Apexクラスやメソッドを公開することにより、外部アプリケーションをRESTまたはSOAP Webサービス操作を使用してコードとアプリケーションにアクセスできます.これは、RESTリソースを使用してApexクラスに注釈を追加することで、残りのリソースとして公開することができます.
    同様に、あなたのメソッドに注釈を追加して、残りを通してそれらを公開できます.たとえば、@ httpgetはあなたのメソッドをRESTリソースとして公開し、HTTP GETリクエストで呼び出すことができます.外部のアプリケーションとSalesforce integrationは、あなたのメソッドをウェブを通して呼び出すことができます.そして、SalesforceからAdd、Update、Deleteなどの操作を実行します.

    構文


    外部アプリケーションがクラスにアクセスできるようにするには、グローバルとして定義します.クラス定義の前に' global 'キーワードを追加します.Globalは、クラスを可視化し、組織の外部にアクセス可能なアクセス識別子です.
    @RestResource(urlMapping='/Account/*')
    global class YourApexClass {
    }
    
    ここで、上記の例では、@ restresource注釈を使用してクラスをRESTリソースとして公開しました.そして、あなたのWebサービスエンドポイントURLマッピングを形成するために使用されます.
    Apexクラスを作成した後、次の手順でApexメソッドを作成します.これらのapexメソッドは、@ httpget、@ httppost、または@ httpdeleteなどで注釈の種類を確認し、残りのリソースとして公開します.
    識別子Globalを持つAPEXクラスで定義されたメソッドは、グローバルと静的として定義する必要があります.以下のコードスニペットでは、APEXメソッドをGETリクエストとして公開しています.
    @RestResource(urlMapping='/Account/*')
    global with sharing class MyRestResource {
    @HttpGet
    global static Account getRecord() {
    // Add your code
    }
    }
    
    より多くの例のために、そして、apexウェブサービスについてより多くを知っているURL以下のチェックアウト

    頂点ウェブサービス Webサービスの公開


    前述のように、Apex Webサービスは外部アプリケーションがApexクラスとメソッドにアクセスできるようにします.

    コードサンプル


    このAPEX RESTコードサンプルでは、レコードを削除してレコードを取得し、レコードを更新するために、3つのHTTPリクエストメソッドを使用してAPEXに簡単なREST APIを実装する方法を示します.認証には .
    以下のコードスニペットでは、@ restResourceでクラスmyrestresourcesが注釈されます.また、Webサービスのエンドポイントは、UrlMappingパラメーターを使用して作成されます.Click here - Apex残りのためのベースエンドポイントです.
    URLマッピングは、ベースエンドポイントに追加され、RESTサービスの終点を作成します.URLのマッピングは大文字小文字を区別し、任意の文字に一致するために使用される野生の文字を含めることができます.
    @RestResource(urlMapping='/Account/*')
    global with sharing class MyRestResource {
    @HttpDelete
    global static void doDelete() {
    RestRequest req = RestContext.request;
    RestResponse res = RestContext.response;
    String accountId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
    Account account = [SELECT Id FROM Account WHERE Id = :accountId];
    delete account;
    }
    @HttpGet
    global static Account doGet() {
    RestRequest req = RestContext.request;
    RestResponse res = RestContext.response;
    String accountId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
    Account result = [SELECT Id, Name, Phone, Website FROM Account WHERE Id = :accountId];
    return result;
    }
    @HttpPost
    global static String doPost(String name,
    String phone, String website) {
    Account account = new Account();
    account.Name = name;
    account.phone = phone;
    account.website = website;
    insert account;
    return account.Id;
    }
    }
    
    @ httpdelete : @ httpdelete注釈は、メソッドレベルで使用され、ApexメソッドをRESTリソースとして公開することができます.このメソッドはHTTP DELETEリクエストを送信したときに呼び出され、指定したリソースを削除します.
    この注釈を使用するには、Apexメソッドをグローバル静的として定義する必要があります.
    @ httpget注釈はメソッドレベルで使用され、ApexメソッドをRESTリソースとして公開することができます.このメソッドはHTTP GETリクエストを送信したときに呼び出され、指定されたリソースを返します.
    これらの注釈を使用する際にいくつかの問題があります.
    24579172この注釈を使用するには、APEXメソッドをグローバル静的と定義する必要があります.HTTPリクエストがHEADリクエストメソッドを使用している場合、@ HttpGetで注釈された
  • メソッドも呼び出されます.
  • @ httppost : @ httppost注釈は、メソッドレベルで使用され、ApexメソッドをRESTリソースとして公開することができます.このメソッドはHTTP POSTリクエストを送信したときに呼び出され、新しいリソースを作成します.
    この注釈を使用するには、Apexメソッドをグローバル静的として定義する必要があります.
    httpput @ @ httppatch @ 2つの注釈があります.以下はその説明です.
    @ httpput :@ httpput注釈は、メソッドレベルで使用され、ApexメソッドをRESTリソースとして公開することができます.このメソッドは、HTTP PUTリクエストが送信されたときに呼び出され、指定されたリソースを作成または更新します.
    この注釈を使用するには、Apexメソッドをグローバル静的として定義する必要があります.
    @ httppatch注釈は、メソッドレベルで使用され、ApexメソッドをRESTリソースとして公開することができます.HTTPメソッドリクエストが送られたときにこのメソッドが呼び出され、指定されたリソースが更新されます.
    この注釈を使用するには、Apexメソッドをグローバル静的として定義する必要があります.
    RESTメソッドを次のリンクで呼び出す方法についての詳細情報を確認できます.https://yourInstance.salesforce.com/services/apexrest/

    ここをクリック コールアウト


    それぞれの残りのコールアウトはプロトコルに従うべきです.主に、これらのコールアウトは、HTTPと有効なエンドポイントURLに基づいています.
    下記のHTTPメソッドは一般的で、残りのコールアウトに使用できます.
  • は、
  • を得ます
  • ポスト
  • を削除する
  • は、
  • を置きました
    サーバーが要求を受け取るとき、それはメソッドに書かれた論理に従って処理して、要求された情報を受取人に返します.これはコールアウトを使用して行うことができます.結果はResponseオブジェクトで返されます.


    サービスからデータを取得します.
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
    request.setMethod('GET');
    HttpResponse response = http.send(request);
    // If the request is successful, parse the JSON response.
    if (response.getStatusCode() == 200) {
    // Deserialize the JSON string into collections of primitive data types.
    Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
    // Cast the values in the 'animals' key as a list
    List<Object> animals = (List<Object>) results.get('animals');
    System.debug('Received the following animals:');
    for (Object animal: animals) {
    System.debug(animal);
    }
    }
    
    データをサービスに送信する
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
    request.setMethod('POST');
    request.setHeader('Content-Type', 'application/json;charset=UTF-8');
    // Set the body as a JSON object
    request.setBody('{"name":"mighty moose"}');
    HttpResponse response = http.send(request);
    // Parse the JSON response
    if (response.getStatusCode() != 201) {
    System.debug('The status code returned was not expected: ' +
    response.getStatusCode() + ' ' + response.getStatus());
    } else {
    System.debug(response.getBody());
    }
    
    各RESTメソッドは、応答を取得したり、XMLまたはJSONフォームのいずれかの要求を受け入れます.要するに、REST Webサービスは、外部アプリケーションと通信するためのJSONまたはXMLを使用しています.