2012-10-31 2 views
6

나는 소프트웨어의 기능을 폭로하려는 프로젝트에서 작업 중이다. 기본적으로 백엔드 설정을하고 JSON msgs를 사용하여 백엔드 코드에서 프론트 엔드를 분리하려고 생각했습니다. 나는 서비스와 API의 차이점에 대해 다소 혼란 스럽다. 나는 API가 서비스 위에 구축 될 수 있다는 것을 알고 있습니다. 그러나 나는이 두 모델을 염두에두고 있습니다 - json-rpc를 사용하여 프로필 X에 액세스하려면웹 서비스 - REST와 PHP JSON RPC

http://xyz.com/?request= { "jsonrpc": "2.0", "id": 1, "method": "getProfile", "params": { "ID": "X"}}

또는이 사용하는 REST처럼한다 -

http://api.xyz.com/X

당신은

+1

여기에 비교가 있습니다. RPC 사용 SOAP을 원한다면 http://stackoverflow.com/questions/1098473/rest-vs-rpc – Chuidiang

+0

을 참조하십시오. 그렇지 않으면 REST. –

답변

20

"서비스"vs "API"는 매우 모호한 질문입니다. 흔히 두 용어는 서로 바꿔서 사용됩니다. "REST"와 "RPC"는 설명하기가 조금 더 쉽습니다.

일반적으로 REST를 사용하면 URL은 "사용자", "계정"등과 같은 특정 리소스를 나타냅니다. 일반적으로 HTTP 메소드 POST/GET을 사용하여 이러한 리소스를 생성/검색/업데이트/삭제할 수 있습니다/PUT/DELETE. 사용자 1125에 대한 프로필을 업데이트하려면 다음을 보낼 수 있습니다 : 당신이 사용자 1,125으로하고 싶었던

POST /user/1125 HTTP/1.1 
Host: wherever.com 
Content-type: application/x-www-form-urlencoded 

firstName=Davey&lastName=Jones&email=dj%40thebrineydeep.com 

아무것도, 당신은 동일한 URL로 요청을 보낼 것입니다. 이 아이디어의 예외 및 변형이 있지만 그 것이 핵심입니다.

RPC 서비스는 특정 URL에 바인딩 된 함수 라이브러리를 사용하는 것과 같습니다. 관련 함수 전체가 모두 /services/json URL에 바인딩되어있을 수 있습니다. 당신은 오래된 데비 존스의 프로필을 변경하고자한다면 다음, 당신은 것 :

POST /services/json HTTP/1.1 
Host: wherever.com 
Content-type: application/json 

{ "jsonrpc": "2.0", 
    "id": 1, 
    "method": "setProfile", 
    "params": [ 1125, 
    { "firstName": "Davey", 
     "lastName": "Jones", 
     "email": "[email protected]" 
    } 
    ] 
} 

나는 개인적으로 JSON-RPC와 같은 더 나은 때문에 : 나는 시도하고 모든 맞게 필요가 없습니다

  • 내 함수가 의미가 없을 수도있는 일종의 resource-to-url 매핑을 호출합니다.
  • API 오류를 나타 내기 위해 HTTP 응답 코드를 오버로드하지 않습니다. 모든 요청은 서버 오류가없는 한 200 응답을 리턴하고 응답 본문에서 오류가 있는지 여부를 알 수 있습니다. JSON-RPC는 오류 조건에 대해 명시 적으로 잘 설명합니다.때문에

때때로 REST는 더 :

  • 때때로 자원 - 투 - URL 매핑이 정말 잘 맞는
  • 제 3자가 그것은에 대한 간단한 모델을 제공
  • 을 이해하는 것이 더 직관적이다 쉽게 식별 된 정보 만 검색하기 만하면됩니다.

나는 코드 작성이 쉽지 않다고 생각합니다.

편집 REST 예제를 JSON 대신보다 일반적인 양식 인코딩 된 데이터로 변경했습니다. 물론 REST로 원하는 데이터 형식을 지정할 수 있습니다. 그것은 돌에 새겨 져 있지 않습니다.

+0

답장을 보내 주셔서 감사합니다 .. rpc 서비스 주위에 "REST 래퍼"를 만드는 것이 합리적입니까? 사용자 프로필 "user1"에 액세스하고 사용자가 "http://xyz.com"/user1 ".. 이것은 내부적으로 rpc-service를 호출하여 id가"user1 "인 자원을 얻습니다. ?? – Fox

+0

REST <-> RPC에서 쉽게 매핑 할 수 있다면 가능합니다. 그럼에도 불구하고 그것은 여분의 작업입니다. 당신은 당신이 그것으로부터 얻는 것이 무엇인지 스스로에게 물어야합니다. 나는 보통 둘 중 하나만 가지고 갈 것이다. – slashingweapon

0

귀하의 REST URL이 JSON-RPC 요청을 동일하지 않습니다 감사합니다.

는 적어도 정말이 http://api.example.org/getProfile?id=X

수 둘 사이에 큰 차이없는 것이다. 또한 'REST'는 다른 URL에 대한 링크를 안정적으로 표현할 수있는 데이터 형식을 반환하지 않는 한 실제적인 REST가 아닙니다. XML 또는 (X) HTML. 이 요구 사항이 충족 될 때까지 HTTP 메서드를 사용하여 물건을 트리거하고 데이터를 앞뒤로 이동하기 때문에 실제로는 "RESTful"이라고 부르면됩니다.

다른 솔루션보다 하나 또는 다른 솔루션을 더 빨리 구축 할 수 있도록 지원하는 소프트웨어를 알고 있거나 경험하지 않는 한 실제로 사용하는 것은 중요하지 않습니다.