REST 웹 서비스와 RPC와 같은 서비스를 차별화하는 것은 무엇입니까?
AJAX를 사용하여 서버에서 JSON 데이터를 가져오는 웹 애플리케이션이 있습니다.쿠키를 설정하려면 먼저 사용자가 브라우저로 로그인해야 합니다.GET
그리고.POST
동사가 사용되는 곳, 어디에서GET
하기 위한 것이며 데터검및색입니다.POST
는 데이터를 수정하는 모든 작업을 위한 것입니다.
제가 알기로는 REST는 위의 방법과 다르게 사용자 인증 정보가 모든 요청과 함께 전송됩니다.PUT
그리고.DELETE
동사도 사용됩니다.
제 질문은 REST 웹 서비스가 엔드포인트가 사용자의 브라우저로만 사용되는 경우 RPC와 같은 방법에 비해 어떤 이점이 있습니까?고객을 알 수 없을 때 REST가 어떤 이점이 있는지 이해할 수 있지만, jQuery agax 호출만 사용할 때 RPC와 같은 방법보다 이점이 더 가치가 있습니까?
REST와 RPC의 큰 차이점 중 하나는 REST가 리소스에 대한 모든 것이고 RPC는 작업에 대한 것이라는 것입니다.예를 들어, 진정한 RESTful 서비스를 사용하면 http://domain.com/service/User/jason/add 이나 http://domain.com/service/User/addUser?username=jason 과 같은 서비스를 호출할 수 없습니다.RESTful 서비스에서는 URL의 리소스만 참조한 다음 HTTP 동사와 요청 본문을 사용하여 해당 리소스에 대해 수행할 작업을 정의합니다.따라서 http:/domain.com/service/jason 에 대한 GET 요청은 리소스(제이슨 사용자)에 대한 정보를 반환해야 합니다.좀 더 구체적으로 http://domain.com/service/user/jason 이라고 말할 수 있지만 결과는 동일해야 합니다.jason이라는 이름의 사용자를 추가하는 경우 http://domain.com/service/user/jason 과 동일한 URL을 사용하지만 PUT 동사를 사용하고 요청 본문에 추가 데이터가 포함됩니다.Jason 리소스를 삭제하려면 동일한 URL(http://domain.com/service/user/jason) 을 사용하고 DELETE 동사를 사용합니다.업데이트하려면 POST 동사를 사용합니다.
REST는 다른 개발자가 사용할 공개 API에 적합합니다.서비스에 대한 기존 지식을 많이 필요로 하지 않도록 매우 표준적으로 만들 수 있습니다.WSDL 통화 등이 없습니다.상태 비저장으로 인해 부분적인 네트워크 장애 시에도 안정성을 높일 수 있습니다.
당신이 설명한 바로는 진정한 RESTFul 서비스가 필요하다고 생각하지 않습니다.하지만 앞으로 더 표준적인 API가 필요할 경우 고려해 볼 수도 있습니다.내부에서만 사용하는 프로젝트를 위해 REST 서비스를 만들었지만, 이는 잠재적으로 수십 개의 다른 서비스와 향후 다른 개발자로부터 해당 서비스에 액세스하기 위한 것이었기 때문입니다.처음에는 몇 가지 프로젝트에만 사용했지만 최종 목표는 보다 표준적인 인터페이스가 필요했습니다.
이런 식으로 생각해 보세요. 중요한 것은 기능인가요, 아니면 작용하고 있는 정보인가요?
REST를 처리할 때는 현재 정보가 무엇인지 확인하거나(GET) 특정 문서를 변경하거나(POST, DELETE) 새 문서를 작성하는(PUT) 정보 상태를 처리합니다.
RPC는 절차/기능/방법/운영에 관한 것입니다.그들을 당신의 언어로 뭐라 부르든.이 정보는 서비스에서 운영되거나 서비스에서 반환되는 것일 뿐입니다. 하지만 그 중 하나일 수도 있습니다.검색하여 항목 목록을 반환하는 중일 수 있습니다.또는 상호 작용이 필요한 부분에 대해 협상하고 있을 수도 있습니다. (REST의 대부분의 협상은 HTTP를 통해 처리되므로 수락 및 수락 언어 헤더를 사용하여 작업을 수행해야 합니다.) 그러나 더 중요한 것은 작업입니다.
그리고 세 번째 유형이 있습니다. 문서/문자 SOAP입니다. 여기서 중요한 것은 메시지입니다. 메시지를 기반으로 호출되는 기능이 무엇인지 추측해야 합니다.CRUD 작업만 처리하는 경우에는 문제가 없을 수 있습니다.이 경우 REST보다 장점은 WSDL을 계속 사용할 수 있다는 것입니다. 따라서 어떤 요소를 전송해야 하는지, 어떤 요소를 반환해야 하는지 미리 알 수 있습니다.
그들은 모두 일을 합니다...문제에 대해 어떻게 생각하는지, 그리고 API로 노출하기 위해 이미 가지고 있는 것에서 변환하는 것이 얼마나 쉬운지에 대한 것이 대부분입니다.만약 당신이 처음부터 시작한다면, 당신은 당신이 원하는 것은 무엇이든 할 수 있습니다.저는 개인적으로 WSDL 파일을 누군가가 클라이언트를 부트스트랩하는 데 사용할 수 있다는 점에서 SOAP(문서/라이트 또는 RPC)를 좋아합니다.저는 사람들이 몇 시간 안에 심각한 질문을 하는 경우가 있었습니다. (빈 문자열을 보내는 것과 null을 보내는 것 사이의 차이와 같은 API의 추상적인 세부 사항을 설명하는 것은 시간이 좀 걸렸지만 REST를 사용하지 않으면 동일한 문제가 발생했을 것입니다.)
REST는 리소스와 함께 작업하는 것이 가장 적합하지만 RPC는 작업에 대한 것입니다.
REST: Representative State Transfer의 약자입니다.독립 시스템 간의 상호 작용을 구성하는 간단한 방법입니다.RESTful 응용 프로그램은 HTTP 요청을 사용하여 데이터를 게시(생성 및/또는 업데이트)하고, 데이터를 읽고(예: 쿼리를 작성) 데이터를 삭제합니다.따라서 REST는 네 가지 CRUD(Create/Read/Update/Delete) 작업 모두에 HTTP를 사용합니다.
RPC: RPC는 기본적으로 사용자 요청을 처리하기 위해 서로 다른 모듈 간에 통신하는 데 사용됩니다.오픈스택에서는 가상 머신을 부팅할 때 nova, glance 및 neutron이 함께 작동하는 방식과 같습니다.
REST/RPC:
프로그래밍 접근 방식으로 REST는 웹 서비스 및 RPC에 대한 가벼운 대안입니다.웹 서비스와 마찬가지로 REST 서비스는 다음과 같습니다.
- 플랫폼에 의존하지 않음(서버가 Unix인지, 클라이언트가 Mac인지, 또는 다른 어떤 것이든 상관 없음),
- 언어에 의존하지 않음(C#는 Java 등과 대화 가능),
- 표준 기반(HTTP 위에서 실행) 및
- 방화벽이 있는 곳에서도 쉽게 사용할 수 있습니다.
REST가 호출 개체에 덜 연결되어 있다는 것은 맞습니다. 서버에서 WSDL 파일을 호출해야 하는 SOAP 웹 서비스와 비교할 때 REST 웹 서비스는 예(예)보다 덜 연결되어 있습니다(즉, 호출하기 전에 웹 서비스에 대한 지식이 필요하지 않음).그리고 대부분의 경우 토큰은 주어진 '표현'에 대한 요청과 함께 전달되어야 합니다.
나는 아약스의 REST를 사용하는 것에 큰 이점이 있다고 생각하지 않습니다. 사실, 당신이 취급하는 API에 따라 SOAP 기반 웹 서비스를 사용하는 동안 URI 매개 변수(쿼리 문자열 매개 변수)로 전달되는 토큰이 필요할 수 있습니다. 이것은 필요하지 않습니다.실제로 SOAP 웹 서비스를 Ajax 호출과 결합하고 JSON 형식으로 데이터를 전달하며 JSON을 서버 측 객체로 역직렬화하는 것은 매우 쉽습니다.게다가 jQuery는 이 모든 것을 매우 쉽게 만듭니다.
모두에게 털어놓기가 싫습니다.RPC는 기본 원격 동작을 추상화하는 로컬 통화를 하고 있습니다. 그리고 REST를 수행하는 것도 마찬가지입니다.REST에 대한 주장은 리소스에 대한 것이 아닙니다. 실제로 작업을 직접 호출합니다.
저는 Jsons가 RPC의 한 형태인 HTTP를 통한 REST를 주장합니다.
다른 인기 있는 RPC는 예를 들어 SOAP를 포함할 수 있습니다.
RPC와 REST는 장단점이 있는 서로 다른 접근 방식일 뿐이며 상황에 따라 둘 다 가치가 있습니다.이 두 가지 접근 방식을 단일 API에서 혼합할 수도 있습니다.
문맥, 그것이 핵심입니다.만병통치약은 없습니다. 맹목적으로 유행을 따르지 마십시오. 항상 맥락 안에서 생각해야 하며 해결책을 선택할 때 실용적이어야 합니다.
자세한 내용은 여기를 참조하십시오!
언급URL : https://stackoverflow.com/questions/7410040/what-differentiates-a-rest-web-service-from-a-rpc-like-one
'source' 카테고리의 다른 글
여러 열이 있는 인덱스 - 하나의 열에 대해서만 쿼리를 수행할 때 확인하시겠습니까? (0) | 2023.07.29 |
---|---|
npm - "파이썬 실행 파일 "python"을 찾을 수 없습니다. PYTHON env 변수를 설정할 수 있습니다." (0) | 2023.07.29 |
리시버가 안드로이드에 등록되어 있는지 어떻게 확인합니까? (0) | 2023.07.29 |
같은 클래스의 정적 메서드에서 비정적 메서드를 호출하는 방법은 무엇입니까? (0) | 2023.07.29 |
이미지 데드 센터를 부트스트랩에 맞추는 방법 (0) | 2023.07.29 |