2016-09-16 4 views
2

관리 패키지 내에 휴식 서비스를 구현했습니다. 일부 고객이 이미이 패키지를 설치했습니다. 현재 3 개의 매개 변수가 필요합니다. 하나의 시스템에서 이루어진 업데이트를 관리 패키지가 설치된 Salesforce 인스턴스로 보내려고합니다. 이 서비스를 구축에서 우리는 관리 패키지가 포함 된 Salesforce REST API

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_methods.htm

우리는 우리의 POST 메서드 호출에 선택적 매개 변수를 추가 할 수 있습니다 .. 예 ... 여기에 설명 하였다. 3 개의 매개 변수에서 4로 이동하십시오. 이 변경 사항이 이전 버전과 호환되기를 바랍니다. 우리가 이것을 시험해보기 위해 보았던 것은 이전의 3 개의 매개 변수가 아닌 4 개의 매개 변수를 보낼 때 "자원을 찾을 수 없음"오류입니다.

모든 고객이 패키지를 다시 설치하지 않고도 나머지 서비스 코드를 업데이트 할 수 있습니까? 아니면 관리 패키지를 설치 한 사람이 새 매개 변수를 읽으려면 새 패키지를 가져와야합니까? 이와 같은 변경 사항이나 업데이트를 관리하는 가장 좋은 방법은 무엇입니까?

이런 종류의 시나리오를 더 잘 구현할 수 있습니까? 설치된 API/패키지 버전을 확인하고 세 개 또는 네 개의 매개 변수를 전달하는 것은 호출자의 책임입니까?

salesforce 내에서 REST API 메소드 구현을 업그레이드하는 것과 관련하여 모범 사례를 공유 할 수 있다면 정말 감사하겠습니다.

예 기존의 방법 : {: "값 1", "이 element2": "값 2", "Element3": "VALUE3" "Element1이"}

예 은 본문에 JSON과 함께 전송 ../apex/updateSomething 새로운 방법 : ../ body/body에서 "jpson"으로 전송 된 내용 ("Element1": "Value1", "Element2": "Value2", "Element3": "Value3", "Element4": "Value4")

+0

아마도 API 사용법의 일부 예를 추가해야합니다 (작동하고 실패한 경우) – YakovL

답변

0

두 가지 질문이 있는데 두 가지를 모두 시도해 보겠습니다.

  1. "나가서 스스로 업그레이드해야합니까?" 아니요, 업그레이드를 푸시 할 수 있습니다. https://developer.salesforce.com/docs/atlas.en-us.packagingGuide.meta/packagingGuide/push_upgrade_intro.htm
  2. "어떻게 호환 가능합니까?" 세 가지 입력 매개 변수에 대해 이전 방법을 유지 관리하고 4 가지 매개 변수를 새로 작성할 수 있습니까?

특정 코드가 없으면 대답하기가 어렵습니다.

0

다양한 방법으로이를 수행 할 수 있습니다.

첫 번째 버전입니다.
@RestResource(urlMapping = '/DemoEndpoint/v1/*')

v1을 추가하면 최종 사용자가 다른 버전을 사용할 수 있고 준비가되면 최신 버전으로 업그레이드 할 수 있습니다. 다음 버전은
@RestResource(urlMapping = '/DemoEndpoint/v2/*')

입니다. API 끝점의 경우 버전 지정을 권장합니다. 각 버전마다 별도의 클래스를 만들어야합니다.

두 번째 방법은 입력 매개 변수를 받아들이는 방식을 변경하는 것입니다. 이 시나리오에서는 메서드 정의에서 입력 매개 변수를 제거하고 Request.requestbody를 사용합니다.

이 원래의 코드이다 (아래 참조 도와 0 파라메터) 3-4 파라미터들을 수락
@HttpPost global static void myPostMethod(string Element1, string Element2, string Element3, string Element4)

새로운 코드 (가정하면 개발자 가이드 예를 따랐다). Element4 그것이 전달되지 않은 비어있는 경우

@HttpPost 
global static string myPostMethod() { 
    RestRequest request = RestContext.request; 
    String body = request.requestBody.toString(); 
    List<Wrapper> obj = (List<Wrapper>) JSON.deserialize(body, List<Wrapper>.Class); 

래퍼 클래스는

public class Wrapper{ 
    string Element1; 
    string Element2; 
    string Element3; 
    string Element4; 
} 

될 것입니다. 당신이 입력 유효성 검사를 수행해야합니다이 방법을 사용. 예를 들어,이 매개 변수는 0이고 모든 요소는 비어 있습니다.