API와 프론트 엔드 백엔드의 구별


22

"표준"비즈니스 웹 사이트를 작성하려고합니다. "표준"으로,이 사이트는 프론트 엔드에 대해 일반적인 HTML5, CSS 및 Javascript를 실행하고, 백엔드 (프로세스를 처리하기 위해)를 실행하고 데이터베이스에 대해 MySQL을 실행합니다. 기본 CRUD 사이트입니다. 프런트 엔드는 데이터베이스에 저장되어있는 모든 것을 만들어냅니다. 백엔드는 사용자가 입력 한 내용을 데이터베이스에 기록하고 일부 처리를 수행합니다. 대부분의 사이트와 마찬가지로

코딩을 시작하기 위해 Github 리포지토리를 만들 때 프론트 엔드 백엔드API 의 차이점을 이해하지 못한다는 것을 깨달았습니다 . 내 질문을 표현하는 또 다른 방법은 API 가이 그림에서 어디로 오는가?

좀 더 자세한 내용과 질문을 나열하겠습니다. 희망적으로 이것은 여러분에게 내 실제 질문이 무엇인지에 대한 더 나은 아이디어를 줄 것입니다. 왜냐하면 혼란스러워서 물어볼 특정 질문을 알 수 없기 때문입니다.

더 자세한 내용은 :

  • Model-View-Controller 패턴을 시도하고 싶습니다. 이것이 질문 / 답변을 바꾸는 지 모르겠습니다.
  • API는 RESTful입니다
  • 백엔드가 속임수를 사용하여 특수 쿼리를 호출하는 대신 백엔드에서 자체 API를 사용 하고 싶습니다 . 이 스타일이 더 일관성이 있다고 생각합니다.

내 질문 :

  • 프론트 엔드가 API를 호출하는 백엔드를 호출합니까? 아니면 프론트 엔드가 백엔드를 호출하는 대신 API를 호출합니까?
  • 백엔드는 단지 API를 실행하고 API는 백엔드 (백엔드가 작업을 위임하는 궁극적 인 컨트롤러 역할을하는)로 제어를 리턴합니까?

프론트 엔드 백엔드와 함께 API의 역할을 설명하는 길고 자세한 답변이 권장됩니다. 답이 프로그래밍 모델 (Model-View-Controller 패턴 이외의 모델)에 의존하는 경우 API를 생각하는 다른 방법을 설명하십시오. 감사. 매우 혼란 스러워요.

답변:


24

많은 웹 개발자들이 API라는 용어를 오용하고 남용하는 방식에 혼란을 겪고 있다고 생각합니다.

  • API는 응용 프로그래밍 인터페이스, 즉 다른 시스템 (또는 동일한 시스템의 일부)간에 공식적으로 지정된 인터페이스를 의미합니다.
  • 얼마 전, 웹 스타트 업이 웹 서비스 API를 통해 (대개 REST와 JSON을 사용하여) 내부 데이터 일부에 공개 액세스를 제공하는 것이 큰 일이되어 타사 개발자가 시스템과 통합 할 수있게되었습니다. 웹 개발자는 "공개적으로 액세스 가능한 웹 서비스"를 구체적으로 (및 유일한) 의미하기 위해 "API"라는 용어를 사용하고,이를 구현하는 데 잘못 사용하기 시작했습니다.
  • 프론트 엔드 및 백엔드 측면 에서이 웹 서비스 API (및 해당 구현) 백엔드 입니다. 일부는 공개적으로 액세스 할 수 있고 다른 일부는 프론트 엔드에만 액세스 할 수 있습니다.
  • 이에 대한 다른 이름은 "서비스 계층"입니다. 즉
    • 프론트 엔드가 호출하는 서비스를 나타냅니다
    • 디스플레이 로직을 포함하지 않습니다 (결국 프론트 엔드의 역할입니다)
    • 단순한 CRUD 조치보다 더 추상적이고 거칠게 표현됩니다 (한 번의 서비스 호출에는 여러 CRUD 조치가 포함되며 데이터베이스 트랜잭션 내에서 실행되어야 함).
    • 응용 프로그램의 비즈니스 논리를 포함

정말 바보 같은 질문이 있습니다. 이것이 서비스 지향 아키텍처의 본질입니까?
johnny

@johnny : 아니요-SOA는 훨씬 더 높은 추상화 수준의 개념으로, 기술 계층보다는 비즈니스 기능을 구성하는 방법에 대한 것입니다.
Michael Borgwardt

나는 그것을 오용이라고 부르지 않을 것입니다. 아마도 "브랜딩"? 웹 개발의 맥락에서 용어가 만들어 졌을 때 PARC 시대와 완전히 다른 "MVC"와 동일합니다.
토마스 정크

9

"전형"웹 사이트와 "백엔드"를 모두 갖춘 "일반적인"웹 사이트 아키텍처를 스케치 해 보겠습니다. 또한 웹 사이트이기 때문에 "클라이언트"도 명시 적으로 제공 할 것입니다. (브라우저의 JavaScript는 서버에서 MySQL을 직접 호출 할 수있는 방법이 없습니다.)

명확하게하기 위해 우리가 사용하는 용어는 다음과 같습니다.

  • 클라이언트 : HTML5 호환 브라우저, esp. DOM과 JavaScript가이를 조작하기 위해로드되었습니다.
  • 프론트 엔드 : 요청 된 개별 페이지와 일부 AJAX 스타일 XML 또는 JSON 액세스 포인트를 모두 포함하는 DOM이 가리키는 PHP 서버.
  • 백엔드 : MySQL이 실행되는 데이터베이스 서버.

올바르게 설계된 프로그램 의 경우 이러한 각 구성 요소 에는 다른 API와 통신하기위한 전용 API가 있습니다. "프론트 엔드"PHP 코드는 임의의 SQL SELECT문을 직접 발행하지 않고 저장 프로 시저, 사전 인증 된 SQL 또는 백엔드 서버에서 실행되는 완전히 다른 PHP 인스턴스에 대한 고유 한 PHP 호출을 호출 합니다 . 이러한 저장 프로 시저 또는 고유 한 HTTP 호출 자체는 API입니다.

디자인의 불순물을 허용하더라도 정의는 변경되지 않습니다. 귀하의 경우 PHP파일 쓰기 및 MySQL로 직접 SQL 문자열을 전송, IT는 여전히 API입니다 당신이 반복 할 가능성이있는 매우 이례적인 일이기는하지만.

AJAX 부두를 사용하지 않고 프론트 엔드 PHP를 엄격하게 동기화하는 것이 전적으로 가능합니다. 위에서 언급 한 동기 파일에서 동일한 외부 PHP 함수를 호출하는 경우, 클라이언트 측 버전과 동일한 API를 사용하는 것으로 간주 할 수 있지만 여기서 "API"라는 용어를 사용하면 명확성이 명확하지 않을 수 있습니다.

결국 응용 프로그래밍 인터페이스 로서의 API는 실제로 하나의 프로그램이 자체 프로세스 외부에서 호출 할 때마다 참조됩니다 . 프론트 엔드와 백엔드가 모두있는 프로젝트를 작성하는 경우 위와 같은 AJAX / PHP / MySQL 또는 MS Access / SQL Server가되어야합니다. 다른 이유가 없다면 어떤 것이 부서 질 때 어디를 볼 수 있는지 쉽게 알 수 있습니다.

(그리고 퍼블릭 API 의 주제는 전적으로 다른 것입니다. 위의 예제에서 클라이언트에 표시되는 URL 만 "퍼블릭 API"입니다. 다른 모든 것, 본질적으로 "비공개"입니다. 내부 API를 호출 할 수있는 통제 할 수없는 모든 코드, 그리고 그러한 결과를 완전히 거부하거나 향후 그렇게 할 권리를 보유합니다.


2
실제로 프론트 엔드는 클라이언트 측 코드 (HTML, Javascript)이고 백엔드는 서버 코드 (PHP, Python, Ruby)입니다.
Pithikos

-3

API는 GET, POST, FETCH, DELETE와 같은 http 요청을 처리합니다. 토큰 액세스에 따라 json, xml 등과 같은 특정 형식의 데이터를 검색하는 데 사용할 수 있습니다.

이 "데이터"는 일부 사용자에게 흥미로운 데이터를 수집하기 위해 공개적으로 액세스 할 수있는 웹 서비스 인 API (Application Programming Interface)를 얻기 위해 자신의 응용 프로그램으로 사용될 수 있습니다.

이 데이터는 실패를 나타내는 데이터 세트를 리턴하거나 API 서버에서 데이터를 검색 할 수 있습니다.

API는 백엔드이므로 모든 프런트 엔드 환경에서 사용할 수 있습니다. 이것은 웹, 안드로이드, iOS에서 사용할 수 있음을 의미합니다 ... https 요청을 처리 할 수있는 응용 프로그램

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.