[DIY] Create Your own restful API using PHP Native Generator

이 튜토리얼에서! 우리는 간단한 웹을 만들 것입니다 RESTful-API에 익숙하다

가장 먼저해야 할 일은 설정을 생성하고 데이터베이스에 사용 된 테이블 백 엔드 구성을 클릭합니다 표 이름은 표의 이름입니다 mysql과 같은 테이블 이름을 사용할 수있다 a ~ z 문자와 밑줄 문자를 사용하는 것이 좋습니다 단수 이름! 단일 항목을 선언하는 데 사용되는 이름을 적어주십시오

복수의 성명은 많은 항목을 선언하는 데 사용되는 좋은 이름을 써주십시오 아이콘 ! PHP 네이티브 생성기에 필요한 아이콘은 fontAwesome입니다

다른 아이콘은 필요하지 않습니다 설명,이 표에 대한 간략한 설명 그런 다음 새 테이블 추가 버튼을 클릭하십시오! 우리는 테이블에 컬럼을 생성 할 것입니다 먼저! 열은 ID에 대한 열로 만들어야합니다 각 테이블에는 유형 ID가있는 열이 있어야하기 때문에 그때! 변경 사항 저장 버튼을 클릭합니다 잇다! 이름, 설명과 같은 다른 열 만들기 변수를 값으로, 변수를 레이블로 지정해야합니다

이것은 입력 양식을 선택하는 데 사용됩니다 다음 것! 우리는 PHP 네이티브 생성기를 사용하여 웹용 PHP 코드를 생성합니다 PHP Native Generator를 클릭하십시오 사이트 이름, 백엔드로 사용되는 웹 사이트의 멋진 이름입니다 허용 된 문자 : az 문자 및 공백 사이트 배경, 배경 이미지 링크 로고 그림 귀하의 웹 사이트에 대한 지배적 인 색상 Forder for Test, 로컬 컴퓨터에서 웹 사이트를 테스트하는 폴더 테스트하지 않으려면 비워 둡니다

변경 사항 저장을 클릭하십시오 지금! 우리는 PHP 코드를 만들 것입니다 테스트 파일 생성 버튼을 클릭하여 좋아, 파일이 만들어졌습니다! 우리는 지금 데이터베이스가 필요하다 PHPMyAdmin을 사용하여 데이터베이스를 만드십시오 예를 들어 db_kid_stories라는 이름을 만듭니다

서버에 사용자 이름, 호스트 이름 및 암호를 설정하십시오 로그인 할 사용자 이름 및 비밀번호 필드 그런 다음 sql 명령을 실행하십시오 얻은 결과보기 다음으로 테이블을 다시 추가 할 수 있습니다 원하는대로 기존 열을 정렬 할 수 있습니다 SQL 실행이 실패한 경우 phpmyadmin에서 테이블을 삭제하여 문제를 해결할 수 있습니다

생성 된 코드입니다

What is a RESTful API? | Creating a RESTful API with ReactPHP

이 채널의 새로운 시리즈에 오신 것을 환영합니다 이 시리즈에서는 ReactPHP로 RESTful API를 만드는 방법에 대해 살펴볼 것이다

먼저 RESTful API가 무엇인지 살펴 보겠습니다 그것이 작동하는 방법과 그것을 구축하는 동안 우리가 명심해야 할 것 그래서 실제로 RESTful API는 무엇입니까? 음, REST는 표현 상태 전달을 나타냅니다 그리고 RESTful API의 모든 아이디어는 실제로이 API를 사용하여 전송할 수 있다는 것입니다 데이터 주변

너무 추상적으로 들리는가? 왜 우리가 그것을 사용하기를 원하는 주된 목적은 전통적인 웹 페이지의 대안입니다 이 전통적인 웹 페이지가 우리의 필요에 맞지 않을 때 그렇다면 RESTful API 란 무엇입니까? 예를 들어 우리의 브라우저 인 클라이언트가 있다고 가정 해 봅시다 우리는 클라이언트이고 웹 페이지처럼 분명히 서버가 있습니다 그런 다음 일부 URL로 요청을 보내면 응답을받습니다 또한 다른 URL에 대한 일반 웹 페이지의 경우 일부 HTML이 포함 된 다른 웹 페이지가 제공됩니다

예를 들어, 우리는 메인 페이지, 카탈로그, 제품 페이지 등을 가지고 있습니다 이것이 전통적인 웹 페이지의 작동 방식입니다 그러나 우리가 서버를 요청하기를 원할 때 어떤 경우에는 어떤가? 그러나 응답으로 우리는 정말로 HTML이 필요하지 않습니다 한번 보죠 우리는 여전히 서버를 보유하고 있지만 이제는 다른 고객들과 함께 있습니다

모바일 애플리케이션이 있다고 가정 해 보겠습니다 그리고 모바일 애플리케이션은 서버에서 데이터를 저장하고 가져와야합니다 하지만 문제는 HTML을 필요로하지 않는다는 것입니다 대신 다른 데이터 형식을 사용합니다 한 가지 예가 단일 페이지 응용 프로그램 일 수 있습니다

여기에 실제로 웹 페이지가 있지만 첫 번째 요청에 대해서만 HTML이 필요합니다 우리가 데이터를 교환하기를 원하는 다른 요청 : 서버에 무언가를 보내고 그것의 데이터 따라서 전통적인 웹 페이지의 주된 차이점은 이러한 모든 경우에 우리가 신경 쓰지 않는다는 점입니다 HTML에 관해서는 데이터를 앞뒤로주고 싶습니다 그리고 알아 두어야 할 중요한 점은 RESTful API 서버가 상태를 유지할 수 없다는 것입니다 연결되어있는 개별 클라이언트는 상관하지 않습니다

따라서 우리는 클라이언트를 가지며 이러한 끝점을 가진 RESTful 서버를 갖게됩니다 이 URL은 Google 서버에서 지원하는 URL입니다 그런 다음이 URL 각각은 HTTP 동사에 의해 정의 된 다른 동작을 지원할 수도 있습니다 / clients에 대한 GET 및 POST 요청이 있습니다 / 제품에 대해서는 DELETE 요청이있을 수 있습니다

그리고 / 주문에 대해서는 GET, POST 및 PUT이 있습니다 이것이 RESTful API의 모습입니다 우리는 두 개의 URL을 가지고 있으며 각 URL은 아마도 두 개의 다른 URL을 지원할 것입니다 HTTP 동사 그리고 고객으로부터 우리는 요청을 보낼 수 있습니다

웹 응용 프로그램의 경우 AJAX 요청 일 수 있습니다 그런 다음 일부 데이터에 대한 응답을받습니다 우리는 페이지를 다시 렌더링하는 데 사용하는 웹 응용 프로그램입니다 RESTful API의이 아이디어는 각기 다른 URL을 지원하는 서버를 가지고있다 HTTP 요청의 유형이지만, 우리가하는 모든 일은 데이터를 교환하는 것입니다

데이터의 형식은 JSON, XML 또는 다른 것일 수 있습니다 여기서 중요한 점은 이러한 API 끝점을 직접 호출하지 않아야한다는 것입니다 사용자가 브라우저에 타이핑하여 이 모든 URL은 백그라운드 호출에 의해 요청됩니다 : JavaScript 또는 모바일 앱 따라서 RESTful API를 사용하여 데이터 교환에 사용합니다 이것이 유일한 방법이기 때문에 클라이언트를 서버에 연결하고 일부 백엔드에 연결할 수 있습니다

이러한 클라이언트는 HTML을 원하지 않으며 데이터가 필요합니다 그리고 다시 한 번 국가에 대해서 그것은 매우 중요합니다 RESTfull API는 상태 비 저장이며 요청간에 클라이언트 상태가 유지되지 않습니다 서버에 저장된 세션이 없습니다

서버는 클라이언트가 연결되어 있는지 신경 쓰지 않습니다 좋습니다 이론적으로는 RESTfull API를 만들어 보겠습니다

DPC2019: Performant APIs with GraphQL and PHP – Andrew Rota

GraphQL 및 PHP로 실행 가능한 API Andrew Rota >> 안녕하세요, 여러분 글쎄, GraphQL과 PHP를 사용하여 실행 가능한 API에 오신 것을 환영합니다

슬라이드는 Bitly URL 인 SlideShare에서 사용할 수 있습니다 나중에 따라하거나 보려는 경우 URL을 트윗했습니다 API는 중요합니다 우리 모두는 아마 우리 응용 프로그램에서 일종의 API를 가지고있을 것입니다 종종 이러한 것들은 우리 고유의 모바일 응용 프로그램, 웹 브라우저, 다른 API와 대화합니다

그들은 모두 다른 모양으로옵니다 그들은 이런 모습을 보일 것입니다 어쩌면 당신은 블로그가 있고 당신에게 기사 및 코멘트 및 저자를주는 API가있을 것입니다 당신은 다른 방식으로 이것을 처리하고, 모양이 아닌이 API를 구현할 수 있습니다 귀하의 필요에 따라 다릅니다

당신은 편안한 API와 같은 모든 단일 리소스에 대한 요청을 만들 수 있습니다 또는 특정 응용 프로그램에 필요한 모든 데이터를 제공하는 하나의 엔드 포인트를 작성하십시오 우리가 이야기 할 전통적인 API에 대한 도전 과제가 있으며 GraphQL은 해결할 하나는 데이터를 가져 오는 것이고 특정 엔드 포인트에서 필요한 것보다 많은 데이터를 요청하는 것입니다 대역폭에 제한이 있고 큰 요청을하기 싫으면 도전 과제입니다 불필요하게

데이터를 가져 오는 과정에서 서버에 여러 번 왕복해야하는 어려움이 있습니다 대기 시간에 민감한 환경에서 어쩌면 모든 요청에 ​​고정 된 비용이 소요되는 기본 모바일 앱을 보유하고있을 수도 있습니다 전통적인 API를 사용하는 개발자의 도전도 있다고 생각합니다 특히 프론트 엔드 및 백엔드 개발자가있는 대규모 조직 또는 엔드 포인트에서 반복되는 기본 앱 개발자, 백엔드와 프론트 엔드간에 앞뒤로 이동 개발자가 API를 변경하고 클라이언트에 필요한 데이터 모양을 변경합니다 GraphQL은 효율적이고 이해하기 쉬운 개발을위한 대체 아키텍처를 제공합니다

아피스 또 다른 선택입니다 도구 상자에서 API를 작성하는 방법과 구조화 방법을 생각하는 또 다른 도구입니다 우리의 데이터를 고객에게 제공합니다 제 이름은 앤드류 로타입니다

보스톤의 Wayfair라는 회사에서 프론트 엔드 플랫폼 팀을 이끌고 있습니다 나는 암스테르담에있을 것을 기쁘게 생각합니다 트위터에서 나를 따라오고 싶다면 GraphQL은 무엇입니까? 나는 GraphQL이 당신에게 새로운 것이라고 생각하고있다 이전에 GraphQL에 대해 들어봤을 지 모르지만, 하지만 아마도 API를 구축하지 않았을 것입니다

GraphQL은 API를위한 쿼리 언어입니다 그것은 단지 언어 이상입니다 그것이 GraphQL의 QL입니다 그것은 런타임입니다 기존 API로 쿼리를 수행하기 위해 API를 작성하는 기술 스택입니다

그러나 데이터는 응용 프로그램 내에서 액세스됩니다 GraphQL 쿼리는 다음과 유사합니다 이것은 간단한 GraphQL 쿼리입니다 나는 오늘이 이야기를 위해 느슨한 데모 응용 프로그램을 사용할 것입니다 PHP 컨퍼런스를 요청하고 있으며, 컨퍼런스, 정보 그 회의들에 대해서

그래서 이것은 쿼리가 어떻게 생겼는지입니다 조금 익숙해 보일 수도 있습니다 아마 뭔가 JSON처럼 보일지도 모릅니다 그리고 그것이 가정되기 때문입니다 요청한 모양의 JSON 데이터를 반환합니다

따라서 GraphQL 쿼리는 본질적으로 내용이없는 단지 JSON 데이터 구조입니다 값 그리고 이러한 쿼리 내에서 중첩 된 값을 요청할 수 있습니다 이것은 GraphQL이 조금 더 강력 해지기 시작하는 곳입니다 내가 보조 자료, 연사뿐만 아니라 회의를 요청하고 싶다면 앞으로 나아갈 수 있습니다

그렇게 그리고 다시, 나는 처음에 요청한 데이터를 얻는다 나는 오늘 당신이 할 수있는 몇 가지 Top을 다루려고하는데, GraphQL이 무엇인지 소개합니다 그리고 GraphQL에서 개념이 무엇인지 살펴보십시오 다른 API에 익숙하다면 GraphQL은 약간의 패러다임 전환입니다

다른 개념과 다른 용어 및 다른 정의가 있습니다 그리고 그것들을 이해하면 GraphQL의 작동 방식과 탐색 방법에 대한 좋은 아이디어를 얻을 수 있습니다 더 나아 우리는 GraphQL API를 어떻게 사용할 수 있는지 클라이언트 측 GraphQL에 대해 이야기 할 것입니다 우리는 자바 스크립트에 중점을 둘 것이지만 모든 유형의 클라이언트에서 그렇게 할 수 있습니다

그리고 GraphQL에 대해 PHP로 서버 측에서 특별히 이야기합니다 아마도이 회의에 조금 더 흥미로울 것입니다 PHP 애플리케이션에서 GraphQL을 구현하는 방법에 대해 이야기합니다 몇 가지 고급 주제에 대해 이야기하고 GraphQL 툴링에 대해 조금 이야기하십시오 GraphQL 작업의 재미있는 부분

GraphQL은 2012 년에 Facebook에서 내부적으로 개발되었습니다 그들은 얼마 동안 그것을 생산에 사용했습니다 또한 응용 프로그램에 대한 요구 사항 중 일부를 제공하기 위해 구축되었습니다 그것은 2015 년 오픈 소스였습니다 그래서 잠시 동안 오픈 소스 기술 스택으로 사용되어 왔습니다

그리고 실제로는 적절한 사양을 가지고 있습니다 따라서 다양한 환경에서 스펙을 구현할 수 있습니다 GraphQL은 클라이언트와 서버 둘 다 기술에 의존하지 않습니다 즉, 다른 기술 스택에서 사용할 수 있습니다 클라이언트에는 JavaScript에 대한 구현, JavaScript에 대한 여러 구현이 있습니다

Swift 용, Android 애플리케이션 용 GraphQL을위한 서버 측 구현도 있습니다 가장 일반적인 것이 노드입니다 따라서 페이스 북이 Graphql을 오픈 소스로 만들 때 노드 참조 서버를 만들었습니다 그리하여 많은 GraphQL 서버의 출발점이되었습니다

그러나 루비 (Ruby)를위한 파이썬 (Python)을위한 후속 커뮤니티 서버 구현이 있었고, 물론, PHP를 위해 그리고 GraphQL을 선택한 이유에 대해 생각할 때, 우리는 이러한 문제 중 일부를 해결하는 것에 대해 생각합니다 이전에 언급 한 바 있습니다 GraphQL을 사용하여 클라이언트는 필요한 데이터의 모양을 정확히 요구합니다 단일 요청에서 여러 리소스를 쿼리 할 수 ​​있습니다

이러한 왕복을 줄일 수 있습니다 API는 강력한 유형의 스키마로 정의됩니다 이것은 GraphQL에서 간과되며 실제 입력 된 API입니다 개발자를위한 강력한 툴링을 가능하게합니다 우리는 나중에 그것을 살펴볼 것입니다

물론이 도구 중 일부는 다른 API 기술에 유용합니다 그러나 GraphQL의 특징 중 일부는 실제로 많은 가능성을 열어줍니다 GraphQL은 웹 스택에 어디에 들어 맞습니까? 한발 뒤로 물러나서 이것이 시스템에 맞는 곳을 확인하십시오 웹 응용 프로그램이 있다면 클라이언트가 있어야합니다 자바 스크립트가 관련되어있을 수 있습니다

그것은 네이티브 응용 프로그램이 될 수도 있습니다 그리고 그 클라이언트는 서버에 요청을 할 것입니다 어쩌면 전체 응용 프로그램이 SPA 일 수도 있고, 많은 AJAX를 만들거나 요청을 가져 오는 것일 수도 있습니다 어쩌면 당신은 서버 쪽 콘텐츠의 대부분과 때로는 기능을 추가 할 수 있습니다 서버에서 콘텐츠를 다시 가져옵니다 GraphQL을 사용하면 서버의 단일 끝점을 통과하게됩니다

이 경우 PHP 서버 그리고 PHP 서버는 데이터를 데이터베이스에서 가져 와서 응답을 되돌려 보냅니다 클라이언트에게 그러나 그 데이터 저장소는 무엇이든 될 수 있습니다 다른 서비스 일 수도 있고 캐스트 레이어 일 수도 있습니다

GraphQL은 백엔드 데이터 저장소가 무엇인지에 대해 논쟁하지 않으며 사용자가 요청할 수 있습니다 모든 데이터 지속성 계층에서 이것은 우리가 오늘 말하고있는 것입니다 이것이 GraphQL을 구현하는 유일한 방법은 아닙니다 PHP에없는 GraphQL 서버를 Node와 같은 곳에 넣을 수 있습니다

데이터베이스 나 데이터베이스에 데이터 요청을하는 PHP 서비스가 있다고 말합니다 캐시 계층 또는 다른 서비스 많은 옵션이 있습니다 당신은 그것에 대해 생각할 수 있습니다 그러나 GraphQL은 중간 API 계층에 있습니다

GraphQL의 개념을 탭해 보겠습니다 GraphQL 생태계를 구성하는 정의 및 용어 중 일부입니다 쿼리로 시작하십시오 기본적으로 GraphQL은 쿼리와 필드에 관한 것입니다 GraphQL에서는 객체의 필드를 쿼리합니다

응답은 쿼리와 동일한 모양을 갖습니다 이 코드 블록 전체가 쿼리입니다 그리고 그 필드는 회의, 이름 또는 그 아래의 날짜가 될 것입니다 필드는 스칼라 값, 프리미티브, 문자열, 숫자 또는 기타 객체 일 수 있습니다 우리는 다른 대상 일 때 하위 선택에 대해 이야기합니다

우리가 프리미티브가 아닌 다른 복잡한 객체를 선택할 때 그리고 이들을 계속 중첩 할 수 있습니다 검색어 전체에서 이러한 하위 항목을 선택할 수 있습니다 그러면 관련 리소스에 대한 여러 요청을 피할 수 있습니다 쿼리는 인수를 가질 수 있습니다

명명 된 인수는 중첩 된 객체의 각 필드에 전달할 수 있습니다 데이터를 필터링하거나 페이지 매기기, 정렬 또는 검색하려는 경우 인수를 전달할 수 있습니다 서버 쪽에서 처리하십시오 클라이언트 측에서는 변수를 사용할 수도 있습니다 여기서 동적 데이터를 전달하여 사용중인 인수에 전달할 수 있습니다

귀하의 질문에 그래서, 그것들은 여러분이 만드는 방법입니다 여러분이 요청을하는 방법입니다 그것은 여러분이 쿼리를 만드는 방법입니다 서비스에

서버 측에서는, GraphQL에서 정의 된 데이터 유형을 정의하는 유형 집합을 정의해야합니다 요청할 수 있습니다 그래서 우리는 스키마를 통해 그렇게합니다 여기서 볼 수있는 코드는 실제로 GraphQL 스키마 언어입니다 그것은 GraphQL 스키마를 기술하는 방법입니다, 어떤 것은 서버 측에서 이것을 빌드하고, 다른 것은하지 않습니다

그것을 유물로 생성합니다 GraphQL 그래프에서 스키마 정의에 대해 이야기하는 방법입니다 그래서 우리는이 스키마가있을 때 객체의 유형에 대한 필드를 정의 할 수 있습니다 우리가 그래프에 가지고있는 것 유형은 다른 필드가있는 객체 일 수 있습니다 스칼라, 다른 유형의 목록 일 수도 있고, 무수한 값일 수도 있습니다

무언가를 null이 아닌 것으로 표시 할 수 있습니다 어느 것이 엄청나게 귀중한가요? 클라이언트 측에서는 값이 정의되어 있는지 여부를 알지 못할 수도 있습니다 당신은 당신의 타입 시스템에서 보증을 할 수 있습니다 클라이언트 쪽에서는 항상 여기있을 것입니다 그렇지 않으면 뭔가 잘못되었습니다

아니면 여기에 없을 것이고 나는 그 부정적인 경우를 다룰 필요가 있습니다 근본적으로 루트 유형 중 하나 인 쿼리에 대해 조금 이야기했습니다 돌연변이라는 또 다른 뿌리 유형이 있습니다 그리고 루트 타입은 GraphQL 내의 특별한 타입입니다 쿼리는 데이터를 요청하기위한 것입니다

그들은 get request와 유사합니다 그래서 우리는 데이터를 읽습니다 GraphQL 클라이언트는 단일 종점에 대해 이러한 쿼리를 만듭니다 때로는 "검색어"라는 검색어가 포함 된 검색어가 표시 될 수 있습니다 로깅이나 쿼리에 대한 메타 데이터 추적에 유용합니다

그러나 이것들은 선택 사항이며, 대괄호를보고 질의를 직접 시작할 수도 있습니다 돌연변이는 또 다른 특별한 유형입니다 그것들은 데이터를 수정하기위한 것입니다 게시 요청, 무언가 추가, 무언가 삭제, 무언가 변경 등과 유사합니다 근본적으로 다른 것처럼 보일 수 있지만 쿼리와 매우 유사하게 작동합니다

이들은 돌연변이 경로 유형으로 시작합니다 그리고 그들은 당신이 뭔가를 바꾸거나 추가하고 있기 때문에 논쟁이있을 것입니다 하지만 그렇지 않으면 쿼리와 동일합니다 데이터를 다시 가져올 때 클라이언트에서 이러한 쿼리를 어떻게 사용합니까? 우리는 우리의 서브 센터 클라이언트 측에 쿼리를 어떻게 작성합니까? GraphQL은 쿼리 작성에 관한 것입니다 정의 된 스키마를 사용하여 서버에 데이터를 요청할 수 있습니다

JavaScript로 만드는 것에 대해 이야기하십시오 이러한 요청을하기 위해 우리가 할 수있는 몇 가지 라이브러리가 있습니다 우리는 확실히 데이터를 되돌리기위한 곧은 HTTP 요청 인 곧은 말풍선 요청을 할 수 있습니다 그러나 GraphQL을 사용하면 클라이언트 라이브러리를 사용하면 도움이 될 것입니다 얻을 수있는 것처럼 간단하게 클라이언트에서 GraphQL을 시작하려면 라이브러리 Lokka처럼

jQueryAJAX와 비슷한 간단한 클라이언트 라이브러리이고 아마도 API를 가지고있을 것입니다 그리고 그 이상은 아닙니다 캐싱은 발생하지 않으며 클라이언트 쪽 진술을 전혀 수행하지 않습니다 그것은 서비스에 대한 직접적인 쿼리입니다

이것은 GraphQL을 시작하는 좋은 방법입니다 더 복잡한 클라이언트 라이브러리가 있습니다 그리고 그들 중 하나, 아마도 가장 인기있는 하나는 아폴로라고 불립니다 이는 클라이언트 측에서 완벽한 데이터 관리 솔루션입니다 이것은 JavaScript, React를위한 구현입니다

그러나 그들은 다른 프론트 엔드 라이브러리뿐만 아니라 애플리케이션을위한 구현을 가지고있다 Apollo가 제공하는 기능은 GraphQL API로 기능을 잠금 해제하는 것입니다 클라이언트 측 캐싱을 위해 정규화 된 데이터와 같은 라인을 지원합니다 로컬 및 원격을 결합 할 수 있습니다 타격을하지 않아도 모든 데이터를 쿼리 할 수 ​​있습니다

서버, 페이지 매김, 재 페치, GraphQL로 도전 할만한 모든 것들, 또한 단단한 클라이언트 라이브러리로 처리 할 때 실제로는 잠금을 해제 할 수 있습니다 다른 API가 기본적으로 제공하지 않을 가능성이 많습니다 괜찮아 이것이 우리가 클라이언트에서 GraphQL을 사용하는 방법입니다 나는 GraphQL에 대해 특히 PHP와 관련하여 이야기하고 싶다 따라서 클라이언트 측 GraphQL이 쿼리 작성에 관한 것이라면 서버에서 데이터를 요청하십시오

서버 측 GraphQL은 스키마를 구현하여 데이터를 반환합니다 PHP로 서버를 구축해 보겠습니다 체크 아웃을 권장하는 훌륭한 서버 라이브러리가 있습니다 PHP로 GraphQL 서버를 만들려는 경우 이것이 바로 webonyx

graphQLPHP 라이브러리입니다 이것은 GraphQL의 완벽한 구현이며 원래의 Node 참조에서 영감을 얻었습니다 도서관 원래 구현과 비슷한 패턴을가집니다

이 도서관이 실제로 당신에게주는 것은 무엇입니까? PHP로 API를 개발할 때 몇 가지 기능이 필요합니다 GraphQL API를 올바르게 구축하십시오 그 중 하나는 유형 시스템 인 경우 유형 프리미티브입니다 따라서 라이브러리는 이러한 프리미티브를 제공합니다 또한 쿼리를 구문 분석, 유효성 검사 및 실행하는 기능을 제공합니다

그것은 GraphQL의 무거운 리프팅입니다 실제로 쿼리를 가져 와서 구현 한 해결 자에 대해 실행합니다 나중에 볼 수있는 도구의 잠금을 해제하는 형식 인트로 피싱을 지원합니다 또한 지연된 필드 해상도와 같은 기능을 지원하여 문제를 해결할 수 있습니다 로 뛰어 들다

어떻게 시작하니? 엔드 포인트부터 시작하십시오 Unruh와 마찬가지로 REST와 같이 여러 개의 끝 점이 있습니다 GraphQL에는 하나의 끝 점이 있습니다 /graphQL 그리고 그 대답을 얻습니다

또한 단일 종단점에 대한 쿼리가 실행되고 GraphQL은 GraphQL PHP 라이브러리는 파싱, 실행을 모두 처리 할 수있는 facade 함수를 제공합니다 해당 쿼리를 해결하기 위해 모든 작업을 수행하는 유효성 검사는 다음과 같습니다 너는 끝낼거야 그런 다음 루트 유형으로 시작해야합니다 그게 질의입니다 GraphQL 쿼리에는 두 가지 루트 유형이 있습니다

돌연변이, 그리고 첫 번째 쿼리부터 시작하겠습니다 루트 유형에는 루트 필드 목록이 있습니다 이들은 귀하의 API에 대한 진입 점입니다 이것은 내 응용 프로그램에 대한 모든 회의를 가져 오는 것과 같을 수 있습니다 각 필드에는 데이터를 가져 오는 데 사용할 수있는 유형 및 해결 방법이 있습니다

GraphQL PHP에게이 특정 필드에 대한 데이터를 얻는 방법을 알려주는 함수가 있습니다 필드가 평평하지 않아도됩니다 다른 객체를 반환 할 수 있습니다 그들은 프리미티브를 반환 할 필요가 없습니다 이렇게하면보다 복잡한 데이터 그래프를 작성할 수 있습니다

일단이 필드를 설정하기 시작하면, PHP에 필드에 대한 데이터를 가져 오는 방법을 알려줘야합니다 그리고 우리는 해결 함수를 통해 이것을합니다 여기에서 데이터 지속성에 액세스하기위한 논리를 작성하게됩니다 층 종종 당신은 해결사에서 직접 그렇게하지 않을 것입니다

비즈니스 또는 도메인 논리로 이동하고 결국에는 계층으로 이동하십시오 GraphQL은 그것이 무엇인지 신경 쓰지 않으며 구현 방법에 많은 유연성을 제공합니다 그 스칼라의 경우, 필드의 값, 객체 유형의 경우, 더 융통성을 원한다면 많이 활용하십시오 리졸버 기능이 중요합니다

당신은 많은 resolve 함수에 접근 할 수 있습니다 이전 해결 필드의 결과로 시작하십시오 데이터가 더 많이 중첩되면서 회의용 스피커를 선택하려고 할 수 있습니다 어떤 회의를 위해 스피커를 선택해야하는지 알아야합니다 당신은 그 논쟁을 가지고 있습니다

필터링하거나 클라이언트에서 데이터를 전달하는 경우 변화가없는 정적 데이터를 전달하는 데 유용한 컨텍스트가 있습니다 요청의 라이프 사이클에서 모든 필드에 대한 액세스 권한이 필요합니다 예를 들어 인증 일 수도 있습니다 일반적으로 GraphQL 패턴은 리졸버 내에서 권한 부여를하지 않는 것이 좋습니다

보다 강력한 인증을 수행 할 수있는 비즈니스 계층에 위임 논리 이러한 확인자와 이러한 복잡한 유형을 구축하는 것은 실제로 GraphQL API 자, 사용자 정의 객체 유형을 생성합시다 이렇게하려면 먼저 객체 유형이 무엇인지 정의하고 새 필드 및 해당 필드 확인자 함수 작성 따라서 루트 쿼리 형식과 마찬가지로 사용자 지정 형식은 필드 컬렉션이며 차례 차례로 그들 자신의 유형도 마찬가지이다 회의 유형에 이름, URL 및 기능 필드가있을 수 있습니다

이들은 문자열이 될 것입니다 그러나 그 중 두 필드가 null이 아님을 알고 있습니다 그래서 저는 제 데이터가 항상 그곳에 있다는 것을 보장 할 것이라는 것을 압니다 그래서, 저는 그것을 API의 타입 시스템에 추가 할 수 있습니다 필드에는 다른 사용자 정의 객체 유형도있을 수 있습니다

따라서, 회의에는 연설자가있을 수 있으며, 이는 연설자 지정 목록이 될 것입니다 내가 만든 타입 그리고 나서 Graphql에 데이터를 얻는 방법을 알려주는 resolver 함수를 제공 할 수 있습니다 들 그리고 그게 다야

이것은 기본적으로 PHP로 GraphQL 서버를 구축하는 것입니다 몇 가지 사용자 정의 유형이 있습니다 스칼라 값을 사용하는 유형의 필드가 있습니다 또는 다른 값 목록 그리고 GraphQL PHP 서버는 데이터를 처리하고 데이터를 요청합니다 백 엔드에 저장하십시오

어제 더 많이 파고 싶으면 어제 워크샵을했습니다 슬라이드를 사용할 수 있습니다 그들은 talk�의 끝에 있으며,이 응용 프로그램을 사용하여 PHP로 GraphQL을 구현할 수 있습니다 구조 마지막 슬라이드 인이 그림은 GraphQL 툴링의 미리보기입니다 사용할 수 있습니다

GraphQL에 대해 재미있는 부분 중 하나라고 생각하기 때문에 그 부분에 들어가기를 원합니다 GraphQL의 핵심 기능은 자체 검사 시스템입니다 GraphQL에 쿼리를 만들어서 지원하는 쿼리를 물어볼 수 있습니다 따라서 일반적으로 수동으로 이러한 쿼리를 수행하지는 않습니다 귀하의 응용 프로그램은 아마 상관 없어

그러나 툴링에 관심을 갖는 개발자 툴링에 관심이 있습니다 이러한 인트로 스펙 션 엔드 포인트를 이러한 인트로 스펙 션 쿼리를 사용자에게 공개 할 수있다 귀하의 API 어쩌면 내부 개발자가 외부 API에 노출하고 싶지 않을 수도 있습니다 하지만 그들은 그래프의 모양을보고 복잡한 오브젝트를 얻을 수 있습니다

처리해야합니다 그러나 API의 모양을 보여 주며 사용할 수있는 유형을 확인할 수 있습니다 이 기능은 강력한 툴링을 구축 할 수있는 많은 기회를 제공합니다 GraphQL은 오픈 소스이기 때문에 많은 툴링이 커뮤니티 내가 아는 한 가장 먼저 출시 된 도구는 그래픽이라고하는 도구입니다

데모를 본 적이 있거나 GraphQL의 데모를 둘러 본 적이 있다면 무엇을 보았을 것입니다 이 도구는 여기에 검색어를 작성하고 구조화 된 형식으로 서버에서 다시 데이터 그러나 당신은 먼 쪽에도이 문서화 패널을 가지고 있습니다 어떤 분야에 대한 정보를 제공합니다 GraphQL에서 할 수있는 일 중 하나는 각 필드에 설명을 설정하는 것입니다

그리고 그것은 인트로 스펙 션 쿼리에서 다시 돌아올 것이고 그래서 당신은 어떤 문서를 제공 할 수 있습니다 코드 자체에서 각 필드의 용도와 사용 방법을 설명합니다 GraphQL 놀이터 (GraphQL Playground)가 있습니다 그래픽과 비슷하지만 더 많은 기능이 있습니다 하나는 스키마를 보는 능력입니다

그리고 나는 그것을 지금 시연 할 수 있습니다 그래서, 비슷한 응용 프로그램에 대한 GraphQL 놀이터를 끌어 올 경우 쿼리를 실행하십시오 서버를 위로 돌립니다 우리는 거기에 갈

쿼리를 실행할 수 있습니다 GraphQL이기 때문에 데이터를 변경할 수 있습니다 위치를 얻고 싶으면 그걸 얻을 수 있습니다 우리가 인트로 스펙 션 쿼리를 작성하고 있기 때문에이를 자동 완성하므로 IDE가 알고 있습니다 어떤 필드를 사용할 수 있습니까? 저는 연사를 만나고 싶고 그들의 연설을 듣고 싶습니다

그래서, 이것은 내가 원하는 구조로 데이터를 돌려 보낼 것입니다 나는이 모든 분야에 대한 나의 문서를 가지고있다 그래서 저는 그걸 조금 파헤 칠 수 있습니다 또한 앞서 언급 한 스키마 표기법을 내성 그것이 어디 있는지 알 수 있으며, 다른 도구에서도이 점을 사용할 수 있습니다

다음 도구는 보이저 (Voyager)입니다 모든 GraphQL API를 대화 형 그래프로 제공합니다 그러면 그래프가 어떻게 보이는지 알 수 있습니다 이것은 정말 유용합니다 만약 당신이 새로운 데이터 영역이나 새로운 어플리케이션으로 뛰어 들었다면 저는 생각합니다

처음으로 팀을 위해 새로운 엔지니어를 고용했는데 데이터에 익숙하지 않은 것일 수 있습니다 귀하의 API를위한 구조 그들은 당신을 즉시 사용할 수있게하고 당신은 이것을 만들기 위해 많은 것을 할 필요가 없습니다 이것은 내가 언급 한 데모 애플리케이션 인 애플리케이션을위한 매우 간단한 API입니다

하지만 실제로 GitHub API를 사용하고 싶습니다 사용할 수있는 GitHub GraphQL API가 있습니다 조금 더 복잡합니다 그래서, 여러분은 실제로 파고 들어갈 수 있습니다, 좋아요, 우리의 루트 쿼리로가 봅시다 우리는 우리가 질의 할 수있는 소수의 영역을 가지고 있습니다

우리는 저장소에 갈 수 있습니다 내 저장소 유형은 어떻게 생겼습니까? 그리고 모든 것을 즉시 볼 수 있습니다 IDE 플러그인도 있습니다 얼마나 많은 사람들이 PHPStorm을 사용합니까? 네 IDE를 사용하는 멋진 기능 중 하나는 JS GraphQL 플러그인을 사용할 수 있다는 것입니다

GraphQL과 통합 된 플러그인 IDE에서 쿼리를 바로 수행하고 데이터를 다시 가져와 자동 완성 기능을 사용할 수 있습니다 어떤 필드를 사용할 수 있는지 이해합니다 어떤 유형이 될 것인가 이것은 사실 GraphQL의 가장 좋아하는 기능 중 하나입니다

Graph API는 유형 API이기 때문에 GraphQL을 입력했기 때문에 실제로 유형을 생성 할 수 있습니다 우리 고객 코드에서 소비 될 수도 있습니다 Apollo가 작성한 Apollo Codegen이라는 도구가 있습니다 그러면 이전에 본 스키마를 실제로 생성 할 수 있습니다 다른 JavaScript 유형 주석 도구 인 TypeScript 또는 FlowType은 직접 유형을 생성합니다

귀하의 스키마에서 이 작업을 수행하여 개발시 코드 작성을 자동 생성 할 수 있습니다 IDE에서 JavaScript를 작성하면 필드를 요청하는지 여부를 알 수 있습니다 그것이 문자열이든, 필드이든간에 nullable인지 여부에 관계없이 정의되지 않은 사례를 처리하기 위해 null 체크를 작성하지 않은 것일 수 있습니다

당신이 잘 이해하지 못한다면 자주 접하게되는 오류를 다루십시오 서버 측에서 데이터 모양의 이것은 GraphQL 도구입니다 나는 그것들을 조금 파고들 것을 권한다 사실 GraphQL을 처음으로 탐색하는 경우 도구는 정말 훌륭합니다 방법으로 자신의 서버를 구축하기 전에 어떻게 작동하는지 이해할 수 있습니다

모든 것이 어떻게 잘 맞는지 이해하는 훌륭한 방법이라고 생각합니다 특정 데이터 도메인에 있거나 일반 GraphQL에 있든 상관 없습니다 그리고 많은 도구들이 커뮤니티에 의해 구축 되었기 때문에 훌륭합니다 그러나 GraphQL의 판매 시점은 도구가 존재하지 않는다고 나는 생각한다 훌륭합니다

그러나 그들이 존재할 수 있다는 사실은 GraphQL 유형 또는 내성 여부 그런 것들 따라서 GraphQL의 고급 기능에 대해 알아 보겠습니다 여기에 너무 자세히 설명하지 않을 것입니다

그러나 보안이나 성능에 대해 궁금한 점이있을 수 있습니다 그리고 그 주제들은 완전히 다른 이야기를위한 주제가 될 수 있습니다 그러나 나는 그들에게 손을 대어 그 문제들 중 일부를 다루는 방법에 대한 아이디어를 심어주고 싶다 GraphQL에서 문제는 n + 1 문제입니다

예를 들어, 우리가 회의를 선택하고 우리는 우리는 연사를 부를 때마다 우리의 결정자를 구현했습니다 필드에서 우리는 데이터 영역에 요청을하고, 그 다음에 회의용 연사 순진하게 구현하면 데이터에 매우 비효율적으로 액세스 할 수 있습니다 우리가이 쿼리에서 돌아 오는 백 회의가 있다고 가정 해보십시오 우리는 모든 회의에 대해 하나의 요청을합니다

그리고 나서 우리는 우리가 원하는 모든 스피커 세트에 대해 n�SQL 쿼리를 만들 것입니다 요청하십시오 이는 데이터를 요청하는 효율적인 방법이 아닙니다 그리고 이것은 실제로 GraphQL에 고유하지 않은 문제입니다 우리가 ORM을 가지고 만나는 것

데이터 액세스를 추상화 할 때마다 생각해야 할 부분입니다 그리고 GraphQL은 이것을 다루기위한 메커니즘을 제공합니다 그리고 그 메커니즘은 지연된 해결 자라 불립니다 GraphQL PHP 라이브러리는 실제로이 기능을 제공합니다 그것들은 필드 해상도를 지연시킬 수있는 지연된 객체를 제공합니다

지연된 필드에 대한 일괄 요청 그래서, 연사 수집의 경우, 제가 본질적으로하고 싶은 것은이 모든 것을 배치하는 것입니다 내가 요청하는 스피커 ID 미안, 요청한 모든 회의 ID 지연 객체를 반환합니다 그리고 나서 내가 갈거야, 내가 다른 모든 분야를 해결하면, 나는 단 하나의, 다중 회의를 위해 연사를 요청할 수 있기를 바랍니다

데이터에 따라 다른 방법으로이 작업을 수행 할 수 있습니다 그러나 GraphQL은 이러한 사례를 처리 할 수 ​​있으며 더 많은 작업이 필요하며 사용자는이를 알고 있어야합니다 GraphQL 작업 GraphQL PHP는 환경이있는 경우 지연 필드 해석 처리도 지원합니다 비동기 작업을 지원합니다

따라서 이러한 느낌은 비동기식으로 해결할 수 있습니다 당신은 바닐라 PHP로 그것을 얻지 못한다 그러나이를 가능하게하는 확실한 환경이 있습니다 GraphQL 서버를 외부에서 또는 외부로 공개하거나 작은 세트가없는 경우 응용 프로그램을 만들고 있다는 것을 알고있는 쿼리 중 병적 인 질의 시스템 성능에 매우 해로운 쿼리

어쩌면 그들은 악의적 인 존재 일 수도 있고 그렇지 않을 수도 있습니다 어쩌면 성능이 좋지 않은 쿼리 일 수도 있습니다 GraphQL PHP 라이브러리에서이를 처리 할 수있는 몇 가지 방법이 있습니다 하나는 실제로 필드 당 복잡성 비용을 설정할 수 있다는 것입니다 또한 GraphQL이 쿼리의 필드를 해석 할 때 이러한 복잡도 점수를 설정할 수 있습니다

그것은 복잡성의 합계로 계산할 것이고 임계 값을 설정하고 말할 수 있습니다 우리가이 많은 분야를 해결했다면, 나는 이것이 비싼 것임을 알고 있습니다 나는 질의를 중단 할 것이다 깊이 제한을 설정하여 요청한 중첩 필드의 수를 제한 할 수도 있습니다 검색어로 이것들은 완화 조치입니다 그들은 완벽하지 않습니다

그러나 제공되는 도구가 있습니다 애플리케이션에 의해서만 소비되는 API를 작성하는 경우 어쩌면 네이티브 앱이나 자바 스크립트 웹 애플리케이션을위한 API를 구축하고 있는지, 몇 가지 옵션이 더 있습니다 그 중 하나가 지속적인 쿼리입니다 따라서 사용자가 제어하는 ​​응용 프로그램을 사용하면 클라이언트에서 보낸 쿼리 은 자의적이지 않을 것입니다

빌드 할 때 쿼리가 생성 될 것을 알 수 있습니다 코드에서 추출 할 수 있습니다 프로덕션 환경에서 실행되는 코드는 전체 쿼리를 보내는 대신 쿼리에 대한 참조를 보냅니다 저장되어 디스크에있을 수도 있고 데이터베이스에있을 수도 있습니다 그러나 그것에 대한 참조를 보내고 있습니다

어쩌면 그것은 해시 된 참조 일 수 있습니다 아마도 ID 일뿐입니다 그러나 근본적으로 이것이 무엇인지는 하위 집합의 쿼리 목록을 만드는 것입니다 만들 수 있습니다 따라서 제작할 수있는 모든 가능한 쿼리를 빌드 타임 및 제작에서 알 수 있습니다

귀하의 서버에 대해 이를 통해 보안 및 성능 문제를 해결할 수 있습니다 이들 중 일부를 독립적으로 테스트 할 수 있습니다 통합 테스트를 통해 실행됩니다 그러나 달리 실행되는 문제를 일으킬 수있는 표면 영역을 줄입니다

서버에 대해 임의의 쿼리가 실행될 수 있습니다 마지막으로, 필자는 정말 흥미로운 기능이라고 생각되는 것을 간단하게 만지고 싶습니다 그러나 불행하게도 PHP에서는 지원되지 않습니다 그리고 그 구독입니다 따라서 구독을 통해 검색어를 만들 수 있습니다

그러나 쿼리 대신 해당 구독 유형을 사용하고 있습니다 사실 이벤트가 발생할 때마다 기본적으로 데이터를 요청할 수 있습니다 예를 들어 회의 통화에 투표 할 수 있다고 상상해 봅시다 따라서 투표에 가입하려면 GraphQL에 투표 이벤트가 발생할 때마다 너를 보내면 너의 클라이언트에게 그 특정한 것에 관한 데이터를 보낼 수있다 투표

일반적으로 이것은 오래 살아있는 웹 소켓 연결이 발생합니다 내가 생각하기에 우리가 GraphQL PHP에 내장 된 지원을하지 못하는 이유가 조금있다 그것을 위해 물론 불가능하지 않습니다 이러한 라이브러리에서는 지원되지 않습니다

이 기능이 GraphQL의 주요 기능이라면 관심을 가질 수 있습니다 귀하의 서버에 대한 또 다른 구현을 살펴보십시오 아마도 노드 일 수 있습니다 시스템에 대한 지원이 내장되어 있습니다 이는 특정 유형의 응용 프로그램에서 유용 할 수있는 흥미로운 기능입니다

라이브 데이터에 의존하는 응용 프로그램 당신이 업데이트되기를 원합니다 어쩌면 이메일 응용 프로그램이나 채팅 응용 프로그램을 실행 중일 수 있습니다 즉시 원하는 이벤트를 얻으려고하는 것 그리고 좋은 점은 기존 GraphQL 클라이언트 라이브러리에서 이러한 서브 스크립 션을 사용할 수 있다는 것입니다

본질적으로 쿼리가 형식화되어 있기 때문에 쿼리와 마찬가지로 사용할 수 있습니다 똑같은 방식 우리가 새로운 기술에 대해 생각할 때마다, 나는 그것으로 발생하는 직업 행동의 저는 GraphQL이 모든 일에 적합한 도구라고 말할 수는 없습니다 일부 응용 프로그램에 적합한 도구입니다 그리고 그것은 새로운 패러다임입니다

그것은 새로운 패러다임으로, 특히 API 개발을위한 많은 기회를 열어줍니다 성능에 민감하며 대기 시간에 민감합니다 그러나 새로운 도전이 있습니다 이 문제를 해결하고 싶습니다 저는이 호출을 GraphQL에 대한 Robert의 제안으로 추천하고자합니다

Robert는 GraphQL을 꽤 많이 다루었습니다 그래서, 일반적으로 그는 녀석을 강력히지지합니다 그러나 몇 가지 단점이나 도전과 생각하는 방법에 대해 훌륭한 이야기를 해줍니다 그들에 대해 내가 부르고 싶었던 일부

RESTful API보다 확실히 복잡한가요? 저는 그것이 GraphQL에 대한 명백한 다이빙이라고 생각합니다 ORM으로 작업하고 있다면, 그들은 GraphQL을 처리 할 준비가되어 있지 않습니다 그들 자신 데이터 액세스 계층을 직접 작성하는 경우 문제가 없을 수 있습니다 그러나 상자 ORM으로 작업하면 좋은 지원이되지 않을 수도 있습니다

나는 아직 말한다 이것을 바꾸려는 도구가 있습니다 캐싱은 훨씬 더 어렵습니다 특히 클라이언트 측 나는 아폴론에 대해 언급했다

그리고 아폴로는 큰 특징 중 하나이고 그 클라이언트 측 캐싱을 다루기 때문에 존재합니다 하나의 리소스 집합을 요청하는 RESTFUL API와 달리 클라이언트 측 캐시에서 GraphQL을 요청하고 저장합니다 이러한 유형은 중첩 될 수 있습니다 여러 개의 다른 필드 그리고 효율적으로 캐시 할 수 있기를 원한다면 그렇게 할 필요가 없습니다

쿼리를 계속 반복하면,이를 처리 할 수있는 풍부한 라이브러리가 필요합니다 아폴로는 정말 잘합니다 그러나 당신은 그것을 얻지 않을 것입니다 평범한 상자에서 꺼내지 마십시오 서버에 대한 쿼리

응용 프로그램 메트릭은 훨씬 더 복잡합니다 RESTFUL API에서 실적이 저조한 엔드 포인트를 발견했다면 그게 어디 있니? 그러나 실적이 저조한 분야는 실적인지 확인하기위한 도구가 필요합니다 GraphQL 응용 프로그램의 문제 다시 말하지만, 지금 이것을 지원하는 데 훌륭한 역할을하는 APM 도구가 있습니다 GraphQL이 점점 더 성숙되고 대중화되면서, 우리는 점점 더 많은 도구를 보게 될 것입니다

그것을 지원하십시오 그러나 그것은 분명히 더 복잡한 것입니다 GraphQL이 항상 API를위한 최선의 선택은 아닙니다 무엇보다도 유스 케이스, 해결하려는 문제를 고려하여 절충하고 결정을 내린다 도구 상자에있는 다른 도구라고 생각합니다

언제 우리가 언제 사용하는지 생각하는 것이 유용합니다 우리가 어떻게 데이터를 구조화하고 어떻게 API를 구조화하는지 생각합니다 GraphQL을 사용하면 클라이언트와 서버간에보다 효율적인 쿼리를보다 쉽게 ​​만들 수 있습니다 더 중요한 것은 API에 대해 생각할 수있는 새로운 방법을 제공한다는 것입니다 애플리케이션 데이터를 어떻게 구성하고 있는지 생각해 볼 수있는 새로운 방법

나는 그것을 시도하는 것이 좋습니다 함께 일하는 것은 재미 있습니다 그리고 상충 관계가 무엇인지, 어떻게 해결할 수 있는지 이해하십시오 당신이 직면하고있는 문제들 고맙습니다

[박수] 어제 준 튜토리얼에 대한 링크입니다 거기에 연습의 무리가 당신이 통과 할 수 있습니다 기본적으로 API에 대한 이야기를 나눴습니다 GitHub에 있는데 결함이 있습니다 로컬에서 실행할 필요는 없습니다

당신이 할 수있는 VM에서 실행할 수 있습니다 자, 몇 분의 질문이 있습니다 네? 관객 : [마이크에서 멀리] 앤드류 : 네 그래서, 질문은, 당신이 당신의 데이터베이스를 디자인 할 때 당신이 생각할 때, 어떤 쿼리가 그것에 대해 실행될 것인지에 대한 정보를 제공합니다 그리고 GraphQL을 사용하면 예측이 어려울 수도 있고 약간있을 수도 있습니다

데이터베이스를 설계하는 것과는 다른 위험이나 도전이 될까요? 나는 그것이라고 생각한다 한 가지 유의할 점은, GraphQL은 데이터베이스를 태양이 접근 할 수 있도록 언급 한 데이터베이스 함수들, 튜토리얼에있는 것들은 실제로 데이터베이스를 사용합니다 후드 아래에서 어떻게 작동 하는지를 보여줄 수 있습니다 어떤 쿼리를 작성하여 어떤 쿼리를 만들 수 있는지 알 수 있습니다

이제는 당신이 더 엄격한 경우에 그들이있는 것과 같은 방식으로 실행되지 않을 수도 있습니다 엄격한 종류의 REST 엔드 포인트가 있습니다 그리고 그것은 ORM과 비슷한 도전 과제를 제시합니다 그리하여 아마도 GraphQL과 비슷한 문제에 직면하게 될 것입니다 확실한 방법은 확실합니다

이를 완화하기 위해 취할 수있는 접근 방법이 있습니다 이러한 데이터 액세스 레이어가 어떤 종류인지에 대해 생각할 필요가 있습니다 세워짐 당신은 확실히 비슷한 문제를 겪고 있습니다 어쩌면 데이터베이스에 전혀 타격을 가하지 않을 수도 있습니다

어쩌면 당신은 다른 서비스를 치고 있을지도 모릅니다 당신은 거기에 다른 도전을해야 할 것입니다 우리는 종종 우리가 만들고있는 쿼리의 수와 비용이 많이 드는 것에 대해 생각하기를 원합니다 그럴 수도 있습니다 그리고 그것은 그것이 중요하다고 생각합니다

네? 청중 : [마이크에서 멀리 떨어진 곳] ANDREW : 예, 대부분의 GraphQL 패턴 또는 권장 사항 그 곳이 어디서 살 필요가 있는지에 대해 강요 당하지 않습니다 그러나 그들은 일반적으로 그것이 당신의 결의에 있어서는 안된다고 말합니다 일반적으로 리졸버 뒤에있는 모델 계층에있을 것입니다 해당 확인자가 데이터베이스에 바로가는 대신 쿼리를 인라이닝하는 대신, 회의에 대한 액세스 권한을 주거나 회의를 다시 보낼 수있는 방법이있을 수 있습니다 내가 필요한 것

그리고 나는이 사용자를 위해 나를 다시 보내 주겠다고 말할 수 있습니다 맞습니까? 이 사용자가 무엇을 볼 수 있는지 압니다 그리고 나서 그것을 통과 할 수 있습니다 그것은 사용자가 누구인지, 그리고 사용자가 액세스 권한을 가진 인증 표시입니다 to는 다른 레이어에서 처리 될 수 있습니다

GraphQL만이 유일한 계층이 아닐 수도 있습니다 API에서 바로 사용하지 마십시오 이것이 바로 GraphQL에 대한 이론이 아닙니다 관객 : [마이크에서 멀리] 앤드류 : 네 그래, 나는 Symfony 측에 어디에 있는지 익숙하지 않다

나는 지금 당장 위대한 답을 줄 수 없을 것입니다 Symfony 컴포넌트가 GraphQL을 지원하기 위해 GraphQL PHP 라이브러리를 사용하고 있다는 것을 알고 있습니다 따라서 Webonyx는 사용하고있는 가장 낮은 수준의 라이브러리입니다 그리고 그 위에 몇 개의 다른 도서관이 있습니다 Symfony와 통합 할 때 해당 라이브러리가하는 일을 확인해 보는 것이 좋습니다

우수한 네 관객 : [마이크에서 멀리] 앤드류 : 네 네 나는 그렇게 생각한다

문제는 전체 애플리케이션을 설계하기위한 모범 사례가 GraphQL API가있는 PHP 하나는 그것이 당신이 사용하고있는 프레임 워크에 달려 있다고 생각합니다 나는 거기에 너무 많은 세부 사항을 들어가기를 원하지 않는다 제 생각에는 일반적으로 GraphQL 끝점을 컨트롤러로 생각할 수 있습니다 그리고 아마 결정자는 카테고리에 들어갈 것입니다

그것은 틀림없이 금형을 확실히 끊습니다 하지만 RESTful 엔드 포인트와 많이 다르다고 생각하지 않습니다 모델 액세스 레이어에 연결합니다 별로 다를 것이 없습니다 그냥 다른 방법

애플리케이션에 GraphQL 및 RESTFUL API가 모두있을 수 있습니다 그리고 GitHub API는 RESTFUL과 GraphQL API를 가지고 있다고 생각합니다 여러 클라이언트로 작업하는 경우 어떤 의미가있을 수 있습니다 그 사람들이 나란히 앉아있는 것을 볼 수있었습니다 차이점은 당신이 GraphQL을위한 다중 종단점을 가지지 않을 것이라는 것입니다

당신은 그것을 가질 것입니다 시원한 나는 시간이 없다고 생각한다 고마워, 모두들 [박수]

REST API Tutorial #1 – Czym jest REST API?

여러 번 REST API에 대해 들어 보았을 가능성이 큽니다 오늘 나는 그게 정확히 무엇인지 설명 할 것입니다

이 비디오의 정보는 API 디자인 및 사용에 유용합니다 API는 Application Programming Interface의 약자입니다 이것이 정확히 무엇을 의미합니까, 나는 잠시 후에 설명 할 것입니다 인터페이스 정의부터 살펴 보겠습니다 인터페이스는 통신을 허용하는 연결 유형입니다

우리는 사용자 인터페이스, 즉 UI (User Interface) 이러한 인터페이스의 예는 컴퓨터 키보드 또는 스마트 폰 화면입니다 마찬가지로 사용자 인터페이스에는 현재이 영화를 보면서 도움을 얻는 응용 프로그램이 있습니다 인터페이스의 두 번째 유형은 프로그래밍 인터페이스, 즉 정확한 API입니다 우리는 잠시 후에 그의 정의에 들어갈 것입니다 인터페이스의 마지막 유형은 레이아웃 형태의 물리적 인터페이스입니다 예 : 장치 연결 가능 그러한 인터페이스의 예는 USB 커넥터 일 수 있습니다

그렇다면 API는 무엇입니까? API는 단순히 통신의 한 방법입니다 서로 다른 소프트웨어 요소간에 웹 API는 적절하게 준비된 메소드 세트입니다 일반적으로 URI 주소 형태로 사용 가능 소위 endpointów 대표적인 엔드 포인트 및 응답은 다소 유사합니다

여기 주소가 overmentcom/movies 인 GET 쿼리가 있습니다 이에 대한 응답으로 객체 배열을 얻습니다 영화 목록이 들어있다 이 특별한 경우에 그것은 하나의 영화입니다

상상할 수있는 것처럼 편리하고 유용한 API를 설계하십시오 그것은 매우 큰 도전입니다 표준화의 부재로 인해 사용에 추가적인 어려움이 발생합니다 통신이 어려워진다 책 목록을 리턴하는 엔드 포인트의 구조는 다음과 같습니다

기본적으로 동일한 세 가지 종단점이 있습니다 끝점의 모양에 대한 구체적인 규칙은 없습니다 이러한 준비된 API로 작업하면 우리는 문서 우리가 그것과 상호 작용할 때마다 이 경우 REST는 도움말과 함께 제공됩니다 REST는 API 디자인 원칙을 정의하는 표준입니다

웹 API의 경우 HTTP 프로토콜을 기반으로합니다 예를 들어, CRUD (Create Read Update Delete) HTTP 메소드에 해당합니다 REST API 예제는 다음과 똑같습니다 이 경우 특정 엔드 포인트가 그리고 우리는 다음 사람이 어떻게 생겼는지 짐작할 수 없습니다 여기에서 영화에 대한 GET 쿼리는 영화 목록을 반환합니다

동영상에 대한 POST 요청은 새 동영상을 저장합니다 그리고 각각의 영화 / : id에 대한 PUT 쿼리 지정된 ID로 영화를 업데이트합니다 마지막으로 지정된 비디오를 제거하라는 쿼리가 있습니다 REST는 우리에게 큰 자유를 줄 때 따라야 할 몇 가지 간단한 규칙을 정의합니다 이 원칙 중 첫 번째는 통일 인터페이스입니다

인터페이스가 클라이언트와 서버간에 표준화 된 통신을 제공합니다 우리는 여기에 많은 다른 장치를 가지고 있습니다 서버와 통신하는 응용 프로그램 하나의 인터페이스를 통해 이것이 바로이 원리가 말하는 것입니다 이러한 방식으로 하나의 인터페이스를 설계하여 모든 애플리케이션의 요구에 대응합니다

두 번째 원칙은 클라이언트 – 서버입니다 응용 프로그램간에 명확하게 구분 된 구분이 있음을 나타냅니다 클라이언트와 서버 측에서 작동합니다 이러한 방식으로, 이러한 응용 프로그램은 독립적으로 개발할 수 있으며 추가적인 유연성 세 번째 규칙은 무국적자입니다

모든 쿼리에는 완전한 정보 집합이 있어야한다고 그것의 정확한 완료를 위해 필요한 따라서 서버는 고객 상태 정보를 저장할 수 없습니다 답례로, 이것은 그가 질문을 보낼 때마다 클라이언트입니다 서버를 허용하는 일련의 정보를 제공합니다 주어진 고객이 주어진 자원에 대한 액세스 권한을 갖고 있는지 여부를 결정합니다

네 번째 규칙 : 캐시 가능 API는 성능 향상을 위해 데이터 캐싱을 지원해야합니다 서버는 API로부터 많은 수의 쿼리를로드 할 수 있습니다 이 경우 정보를 캐시에 저장하는 것이 좋습니다 물론, 그러한 가능성이 있다면 서버는 어떤 데이터가 캐싱 될 수 있고 어떤 데이터가 아닌지를 알려야합니다

다섯 번째 규칙은 "계층화 된 시스템" 이 경우 서버는 다음과 같은 방식으로 설계되어야합니다 고객이 쿼리를 보낼 때 대답을 얻을 수 있도록 지식이 없어도 다른 쪽에서 무슨 일이 일어나고 있는지 따라서 우리는 여기에 클라이언트를 가지고 있습니다이 클라이언트는 전에 서버와 서버에 쿼리를 보냅니다 응답을 준비하고 몇 가지 추가 작업을 수행 할 수 있습니다

고객은 그 사실을 알 필요가 없습니다 이러한 설계된 시스템은 클라이언트와 서버 간의 상호 작용을 확실히 촉진합니다 마지막 옵션은 "주문형 코드"입니다 이 원칙은 코드 조각 (예 : JavaScript)을 전송할 가능성을 제공합니다 이는 고객 측에서 만들 수 있습니다

따라서 서버는 클라이언트가 자유롭게 사용할 수있는 코드를 반환합니다 이 시점에서 REST API가 무엇인지 일반 아이디어가 있어야합니다 그것의 기본 원리를 안다 아직도 뭔가 명확하지 않은 경우 걱정하지 마십시오 우리가 오늘 말한 모든 것, 우리는 실제로 후속 영화에서

듣다!

Introduction to Beachcasts – web development PHP Videos by Adam Culp

모두와 주셔서 감사합니다 감사합니다

내 이름은 해변 손님에게 맞추기위한거야 Adam Culp와 나는 이것을 위해 만든 몇 가지 다른 이유 중 하나는 왜 내가 해변에 던지기 시작한 이유는 컨설턴트로서 나는 항상 그런 것은 아니기 때문에 조사 할 시간이 많이 걸린다 항상 내 프로그램을 짜는데 많은 시간을 얻는다 우리와 똑같은 것을 배워라 개발자는 종종 학습 곡선을 유지합니다

임시 응용 프로그램을 만들어서 새롭고 놀기 기술 및 나는 다만 얻지 않는다 많은 시간을 갖고 싶습니다 그래서 나는 해변 캐스팅을 나의 놀이터를 만들면 내가 만들 수있다 몇 가지 신기술을 가진 것들은 새로운 것들로 놀아 라 새로운 도구 중 일부 프레임 워크 최근에 저는 새로운 것을 배우고 싶었습니다 조금 더 나은 프레임 워크 Zend Expressive 나도 원했어

Doctrine ORM을 배우고 자신을 가르쳐주세요 함께 다른 도구를 사용하는 그래서 나는 방법으로 Beachcasts를 사용할 것이다 그 정보를 공유하면 그것을 할거야 나는 잘 기록 할거야 그것을 공유하고 나에게 다른 것을 가지고있다 이 일을하고 그들이 한 친구들 꽤 잘 그래서 나는 그것을 줄 것이다

시험 또한 그것이 어떻게 진행되는지 볼 수 있습니다 forewarning의 말은하지 않을 것이다 완전해질 필요가 없다 그것은 내가 새롭고 재미있게 놀고있는 바로 그 것이다 기술을 공유하고 당신과 공유 잘하면 우리는 모두에게서 배울 수 있습니다

나는 긍정적 인 일이되기를 바란다 그래서 더 이상 지체하지 않고 나는 계속해서이 첫 번째 장면을 닫으십시오 나는 할부금을 받고 다음에 녹음 중일 때 나는 바쁘다 내가 얼마나 자주 할 수 있는지 이것들 내가 일주일에 두 번 또는 일주일에 한 번 또는 한 달에 한 번 나는 그걸 알아낼 수 있을지 잘 모르겠다

나가서 그러나 지금 당장 나는 생각하고있다 어쩌면 일주일에 한 번 우린 괜찮을거야 그래서 오늘은 그것을하는 나의 처음 주간이다 어쩌면 나는 그것을 매회하려고 노력할 것이다 목요일에 우리가 볼거야, 목요일에 경향이있다

대부분의 경우에 나를 위해 좋습니다 그래서 우리는 볼 것입니다 그 일이 어떻게 진행되는지 그러나 그 동안에 잘하면 나는 다음 에피소드를 꺼낸다 레알 이 후 빠른 시간 내에 당신은 그것을 즐길 수있는 감사합니다

REST ou GraphQL ? Exemples illustrés avec Symfony et API Platform – Kévin Dunglas – PHP Tour 2018

안녕하세요 나는 이미 어제 여기에 있었고, 나는 프리젠 테이션에 빨리 전진 할 것이다 : Kévin Dunglas 저는 Les-Tilleuls에서 일하면서 Symfony 핵심 팀의 일원입니다

그리고 저는이 도구의 첫 번째 저서 (오늘 발표 할 형식과 함께 사용하는 형식)의 작성자였습니다 Les-Tilleuls는 여전히 어제와 같습니다 항상 자체 관리됩니다 급여는 항상 똑같이 나누어집니다 우리는 릴 (Lille)과 파리 (Paris)의 사람들을 항상 찾고 있습니다

주저하지 말고 저희에게 연락하십시오! 그렇다면 API 플랫폼이란 무엇입니까? 누가이 솔루션을 이미 사용 했습니까? 어쨌든 많은 사람들이 좋아 따라서 API Platform은 완전한 스택 프레임 워크입니다 우리는 이것이 매우 중요한 개념이라는 것을 알게 될 것입니다 우리는 오늘 PHP 부분에 대해 주로 이야기 할 것입니다 그러나 그것은 구성 요소를 포함하는 프레임 워크입니다

서버 측 및 클라이언트 측 응용 프로그램 API로 구동됩니다 즉, 피벗 포인트, 우리의 응용 프로그램의 초점 그것은 API가 될 것이며, 우리는 다른 형식을 폭로 할 수있는 서버 측 API를 만들 것입니다 표준 또는 개방형 (우리는 바로 그 차이점을 보게 될 것입니다), 둘 다 가장 인기있는 패턴 (즉, REST와 Facebook의 GraphQL 형식 모두 지원됨) 이러한 클라이언트 측 API가 다음을 수행하도록 소비해야합니다 프로그레시브 웹 앱,보다 전통적인 웹 사이트, 모바일 앱 또는 연결된 객체 따라서 API 플랫폼 패키지에서 이 주요 구성 요소는 역사적인 구성 요소입니다 가장 길었던 것, 가장 성숙한 것, 아마 가장 많이 사용되었고 가장 잘 알려진 것 그것은 첫째로 REST와 GraphQL 웹 API를 노출하기 쉽게 만드는 PHP 라이브러리입니다

Symfony와 우리가 반환 할 배포본을 통합하는 번들이 더 많습니다 Symfony Flex 애플리케이션 (Symfony 4 포함)과 사전 설치된 REST 또는 GraphQL API를 생성하는 데 필요한 모든 패키지가 포함되어 있습니다 또한 덜 알려진 구성 요소 : 모델 생성기, 누가 우리가 가고있는 공개 Schemaorg 형식 (오픈 어휘 Schemaorg)을 읽을 수 있습니까? 우리는 많은 타입의 많은 타입을 포함하는이 열린 어휘에서 바로 돌아올 것입니다 큰 제조 업체

예를 들어, 폭스 바겐에 의해 공헌 된 차량 및 자동차에 대한 매우 정확한 데이터 모델 매우 정확한 데이터 모델이있다 출판 될 수있는 서류, 책 등 학계에 의해 만들어진 더블린 코어 변화 그래서 우리는 기존의 모델을 활용할 수 있습니다 그리고 PHP 데이터 모델을 생성합니다 : 따라서 속성을 가진 클래스 집합, guetters the setters, PHP doc, Symfony의 유효성 검사 규칙, ORM Doctrine과의 매핑, 아마도 API Platform을 사용한 매핑 실제로 독립적 인 구성 요소이며 각 구성 요소는 완전히 독립적이며 다른 구성 요소없이 하나씩 사용할 수 있습니다 따라서 이미 존재하는 것으로부터 데이터 모델을 생성하고자한다면 API 플랫폼을 사용하지 않는 기존 PHP 응용 프로그램에서이 구성 요소는 계속 작동합니다

그런 다음 Javascript로 만들어진 두 개의 구성 요소가 있습니다 그리고 그것은 꽤 우습다 우리는 PHP 둘러보기에 있지만, 몇 달 동안 Github은 API Plateform 프로젝트를 재조정하여 Javascript 프로젝트라고 부릅니다! 그것은 좋거나 개발자들에게 달려 있다는 것이 좋지 않습니다 그래서 우리는 꽤 흥미로운 두 가지 구성 요소를 가지고 있습니다 : 관리 구성 요소 EasyAdmin 또는 Sonata를 이미 사용했다면 시각적으로는 소재 디자인처럼 보이고 완전히 동적 인 클라이언트가 사용된다는 것을 제외하고는 최신 REST 또는 GraphQL API의 검색 가능성 기능 API의 URL 만 있으면 관리 인터페이스를 동적으로 구축 할 수 있습니다

이 API를 위해 Sonata와 비슷한 것으로 미리 알 필요가 없습니다 이 API를 공개하는 유형 및 연산은 이러한 새로운 형식 덕분에 완전히 동적 인 자체 탐색 가능합니다 이 도구는 Generator 클라이언트가 Nodejs로 작성된 명령 줄 도구입니다 같은 문서는 문서를 읽는다

노출 될 수있는 최신 API 플랫폼 API 서버 구성 요소뿐만 아니라 파이썬에서 수행 할 수있는 이러한 개방형 포맷을 존중하는 모든 도구들, 자바에서, 프로그래밍 언어가 아주 많아서이 API를 위해 생성 될 것이다 프로그레시브 웹 앱 – Symfony 나 Laravel의 MakerBundle을 시각적으로 생성하는 것처럼 보입니다 CRUD의 응용 목록 페이지, 상세 페이지, 편집 페이지, 삭제 페이지 등이 있습니다 관리자와는 달리, 모든 것이 REST API를 통해 진행되며 Driven API 프로젝트가됩니다 직접 액세스 할 수 없습니다

직접 액세스 할 수 없게 될 것입니다 데이터베이스 또는 PHP 코드를 완료하면 공개 된 형식을 통해 모든 것이 API를 통해 전달됩니다 API와이 두 가지 구성 요소에 의해 정말로 중요한 것은 그것이 작동한다는 것입니다 JSON-LD를 지원하는 API가 있고 곧 Swagger를 사용할 수 있다면 Swagger OpenAPI는 서버 측 프로그래밍 언어가 무엇이든간에 작동합니다 반대로 서버 측 구성 요소는 클라이언트 측 프로그래밍 언어와 상관없이 작동합니다

Javascript, Python, Go 또는 Swift 등, Kotlin, 그런 종류의 것입니다 도구의 경우이 Javascript 도구에 대한 지원이 있습니다 2 개의 Javascript 프레임 워크 (물론 우리는 서버 부분이나 클라이언트 부분을위한 바퀴를 다시 만들지 않았습니다) 우리는 React와 Redux를 사용하는 Progressive Web App을 생성 할 수 있습니다 Vuejs를 지원하는 프로그레시브 웹 앱을 생성 할 수도 있습니다

좋아하는 프레임 워크를 선택할 수 있습니다 실제로 우리는 다른 형식을 지원하기 위해 스켈레톤을 추가 할 수 있습니다 실험적인 해골이 있습니다 React Apple Store, iOS 또는에 패키지로 제공되는 기본 앱 Google Play 스토어 따라서 기본적으로 오늘날 우리가 가장 많이 말할 서버 구성 요소는 많은 형식을 지원합니다 어제 Symfony 시리얼 라이저에 대한 나의 conf

에 온다면, 네이티브로 지원되는 몇 가지 포맷이 있다는 것을 알았습니다 Symfony 시리얼 라이저에서 사실 API 플랫폼은 주로 Symfony 시리얼 라이저를 기반으로하며 그에게 소위 하이퍼 미디어 기능을 가져라 우리는 그것이 무엇인지 후에 조금 더 자세하게 볼 것입니다 주요 아이디어는 모든 PHP 객체가 변환 될 수 있다는 것입니다

JSON (Symfony 시리얼 라이저가하는 것) 에서뿐만 아니라 URL에서도 사용할 수 있습니다 우리는 직접 일치를 할 수있을 것입니다 1은 1입니다 각 객체는 액세스 할 수있는 공개 URL로 식별됩니다 그것이 하이퍼 미디어 포맷이 가져다주는 것입니다

이것은 Plateform API가 단순한 Symfony 시리얼 라이저와 비교하여 가져 오는 것입니다 그래서 12 월 API 플랫폼의 안정 버전에서는 12 월 이래로 REST가 아닌 형식의 지원이 있다고합니다 GraphQL 그리고 이것은 오늘날 REST와 이야기 할 것입니다 어쨌든 API Plateform에이를 추가하는 것은 큰 일이었습니다

프레임 워크의 기본 디자인 주로 Alan Poulain입니다 그는이 지원을 추가 한 GraphQL에서 거대한 직업에 대해 감사 드리고 싶습니다 4500 개가 넘습니다 약 4500 줄의 코드가 추가되어 거의 모든 인프라를 재사용 할 수 있습니다

API 플랫폼에서 REST를 위해 제공되었습니다 따라서 GraphQL에 매우 특정한 많은 것들이 있습니다 GraphQL은 공식적인 확장 기능이있는 약간 복잡한 형식입니다 그리고 갑자기 Platform API에서 기본 GraphQL 형식에 대한 지원이 제공됩니다 모든 확장 기능은 우리가 직후에 제시 할 Relay 확장 기능을 포함합니다

어떻게 작동합니까? 어떻게 정착합니까? 엔지니어링 학위를받을 필요가 없습니다! 우리는 그것을 사용할 수있는 개발자조차 가지고 있지 않은 고객이 있습니다 일반적으로 지금까지는 모든 사람에게 좋을 것입니다 우리는 기따 웃에 갈거야 우리는 사이트에 가서 아카이브를 다운로드합니다 그것은 압축 해제됩니다

도킹해야합니다 유일한 중독은 기계의 Docker입니다 작성할 필요가 없으며 PHP가 필요없고 아무 것도 필요하지 않습니다 PostgreSQL 서버가 필요 없습니다 우리는 "docker-compose up"이라고 입력합니다

그런 다음 우리는 필요한 모든 것을 가지고 있습니다 우리는 클라이언트에서 사용할 수있는 작은 테스트 API를 가지고 있습니다 관리 인터페이스와 우리가 우리가 개발을 시작하는 데 필요한 모든 것 우리는 또한 개발 및 생산을 위해 잘 어울리는 모든 컨테이너와 함께 제공되는이 설정 Docker를 사용할 수 있습니다 주요 클라우드 플랫폼에서 몇 분 내에 전체 API 플랫폼 응용 프로그램을 배포 할 수 있습니다 Google Google Cloud Platform, Azure 및 Amazon ECS는 원주민 인 Kubernetes의 지원 덕분입니다

그래서 우리가 시작할 때, 우리는이 페이지를 가지고 있습니다이 페이지는 React에서 만들어졌으며,이 컨테이너에서 우리는 생성 할 수 있습니다 프로그레시브 웹 앱 프로그레시브 웹 앱에 대해 어제의 이야기가 있다면, JS에서 만든 슈퍼 스파입니다 CSS는 HTML이지만, 휴대 전화의 기본 앱으로 실행할 수 있습니다

네트워크가 없을 때 오프라인으로 작동하고 연결을 재개 할 수있는 사용자, 새 API를 사용하는 사용자 HTML5 및 ES6 ES7은 이전보다 훨씬 더 진보 된 작업을 수행 할 수 있습니다 이 컨테이너에서 생성 할 수 있습니다 당신은 작은 의사 페이지를 가지고 있으며, 작은 기능을 가진 API 작은 테스트 엔드 포인트 (물론 당신이 정말로 개발하기 시작할 때 삭제할 것입니다) 자동으로 생성되는 Swagger 문서 (다른 것들 중에서)와 Swagger UI JSON 형식이 아닌 사람이 읽을 수있는 문서를 갖기 위해 특별한 작은 주제와 통합되어 있습니다 마지막으로 마지막 컨테이너가 있습니다 어떤 동적 인 관리자 인터페이스 (내가 전에 언급 한) 예를 들어, 완전히 동적으로 클라이언트 측에서 생성됩니다 컨테이너에 미리 제공되는 테스트 API의 경우

그래서 우리는 변화 할 것이고, 우리는 클라이언트 부분에 머 무르지 않을 것입니다 그러나 그것이 꽤 잘 작동한다는 것을 알아라 그것은 (작은 JS를하는 사람들)에 기반을두고 있으며, admin-on-rest 라이브러리는 react-admin으로 이름이 바뀌 었습니다 François Zaninotto의 상자 인 Marmelab이라는 프랑스 상자 그래서 모든 것은이 라이브러리를 기반으로합니다

그래서 거기에는 모든 클라이언트 구성 요소가 Platform API 서버로 있습니다 Docker 설정이 정상입니다 흥미로운 작은 트랙, API 플랫폼없이 Symfony를 사용한다면 API 플랫폼을 복제하고 docker라는 폴더를 복사하여 붙여 넣을 수 있습니다 설정은 모든 Symfony 4 프로젝트에서 작동합니다 그것은 테스트를 거쳤으며 모든 것이 그렇게 오히려 실용적입니다

네이티브 PostgreSQL 서버가 있습니다 PostgreSQL을 선택했지만 사실 Doctrine이 지원하는 서버를 사용할 수 있습니다 내가 반환 할 캐시 메커니즘이 있습니다 배포판을 거치지 않고 API 플랫폼을 설치하면 컨테이너에 미리 설치된 Varnish가 사용 중지됩니다 Dev에서 HTTPS 및 HTTP2를 지원합니다 일부 기능은 HTTPS 및 HTTP2에서만 액세스 할 수 있기 때문에 JS 개발에 유용합니다

그리고 당신은 당신이 전에 이야기했던 Kubernetes에 쉬운 배치를 가지고 있습니다 따라서 도커와 모든 JS 스택 등을 운반하고 싶지 않으면 작은 API를 만들고 싶을뿐입니다 다른 해결책이 있습니다 당신은 Symfony 4를 설치합니다 최소한의 버전 인 해골을 사용하고 웹 사이트가 아니라면 다음과 같이 입력하십시오 : "작성 req api" 그것은 Symfony 요리법과의 공식적인 통합이며 API 플랫폼 서버 부분을 얻습니다

가능한 최소한의 의존성을 가진 미니멀리스트이지만 슈퍼 일을 쉽게하기에 충분하다 통합 PHP 웹 서버 및 모든 우리가 여기서 볼 수있는 것은 당신도 할 수있을 것입니다 그것이 바로 우리가 해골을 설치했을 때입니다 Symfony와 우리는 API Plateform을 실행하여 더 이상 HTTPS가있는 테스트가 더 이상 존재하지 않으며 더 많은 HTTP2가 있습니다 한 쌍의 물건이 제거되었습니다

하지만 이것은 순수한 PHP 일 뿐이며 Symfony 개발을 할 때 우리가 보았던 것과 더 가깝습니다 따라서 기본적으로 API 플랫폼은 하나의 형식 만 사용 가능하며 JSON-LD입니다 GraphQL 지원을 원한다면, 그리스에 손이 조금 더 걸릴 것입니다 땀을 몇 방울 떨어 뜨리면 GraphQL의 지원을 설치해야합니다 그래서 GraphQL, 우리는 직후에 볼 것입니다

특정 형식인데 JSON이 아니며 XML이 아니며 JSON과 약간 비슷하지만 특정 구문 분석기가 필요한 특정 형식 우리는 그것을 재개발하는 것을 즐겁게 생각하지 못했습니다 우리는 잘 작동하는 도서관을 가져갔습니다 조금만 더하십시오 이것이 API 플랫폼에서 사용 된 것이고, API 플랫폼에서도 사용됩니다 overblog / GraphQLBundle을위한 히트 API 플랫폼의 GraphQL 지원을 활성화하십시오

추가적으로 설치해야합니다 기본적으로 존재하지 않으며, 상황이 점점 어려워집니다 실제로 실제로는 그렇지 않습니다

그냥 해보면 GraphQL API가 데모 API에서 작동한다는 것은 잘 알고 있습니다 여기서는 작동하는 GraphQL API, "/ graphql"이라고하는 끝 점 및 그래픽 인터페이스가 있습니다 Swagger UI의 방식으로 문서를 발견 할 수있게 해주는 GraphiQL 귀하의 GraphQL API를 사용하고 질문을 시작하여 답변을 즉시 볼 수 있습니다 GraphQL 마침내 그렇게 복잡하지 않습니다 그래서 우리는 첫 번째 GraphQL 쿼리를 보았습니다

GraphQL에서 충분히 흥미 롭습니다 따라서이 언어는 JSON과 유사하지만 유효한 JSON이 아닌 검색어 설명 언어처럼 보이는 언어입니다 그러나 다른 한편으로는 매우 우아하고 극단적 인 사람입니다 이 요청은 무엇입니까? 단일 HTTP 요청에서 두 개의 GraphQL 쿼리를로드합니다 하나는 내 끝점 인 "greeting"을 요청하고 ID 1, "/ greetings / 1"이 정확하고이 객체의 경우, 지시 할 고객입니다

복구하려는 데이터와이 경우에는이 리소스의 name 속성을 가져 오려고합니다 우리는 1 초를 회복합니다 그래서 매우 흥미로운 첫 번째 기능 : 하나의 HTTP 요청에 원하는만큼 많은 요청을 넣을 수있는 기능 이에 대한 응답으로 GraphQL 서버가 JSON을 반환합니다 그것은 조금 다릅니다 REST, 우리는 우리가 보내는 것 사이에 동등 함이 없습니다

우리가 회복 한 것 우리는 여전히 "데이터"키를 사용할 수 있습니다 그리고 우리는 우리의 요청에 대한 답을 얻습니다 그래서 우리는 우리의 객체 "/ greetings / 1"의 Hello 속성, 속성 이름 용서, 우리의 속성 이름 우리의 자원 "/ greetings / 3"을 처리하십시오 그때 좋습니다

하지만 여전히 질문 할 수있는 질문이 있습니다 이유는 무엇입니까? 누가 GraphQL을 이미 사용 했습니까? 좋아, 꽤 인기가있어 이미 Rest API를 만든 사람은 누구입니까? 정말 지워? 좀 덜 괜찮아 좀 더 자세하게 이야기하겠습니다 그리고 이미 REST API에 누가 문제가 있습니까? 그렇다면 왜 GraphQL인가? GraphQL은 더 나은 REST입니다! REST 2

0이 여기에 있으며 GraphQL이라고 불립니다! 잘 그것은 그것이 그렇게 나쁘지 않은 것처럼 보였다, 약간 오래되었던 REST GraphQL은 REST 킬러입니다 또는이 하나가 내가 가장 좋아하는 API입니다 REST API는 REST-in-peace API를 사용합니다 좋아, 선험적이다 일단 우리가 GraphQL을 가지고 있다면 진짜 좋은 이유가 있으며 GraphQL은 REST를 죽일 것입니다

어쨌든 그것은 거대한 것입니다 페이스 북에 의해 시작된이 기술을 둘러싼 버즈 우리는 그것에 관심이 있습니다 우리는 우리 자신에게 말했다 : 그것이 정말로 멋지 기 때문에 우리는 그것을지지해야만한다! ! 겁탈 자! 우리는 흥미로운 부분이 있다는 것을 보게 될 것입니다 아마도 조금 있습니다 과대 평가 및 REST (실제 REST)는 다소 과소 평가 될 수 있습니다

그건 개인적인 의견입니다 그렇다면 GraphQL은 무엇입니까? 그것은 데이터의 쿼리 언어입니다 이것이 GraphQL의 가장 중요한 것입니다 부수적으로 API 형식이지만 주로 외부에 노출되는 데이터에 대한 쿼리 형식입니다 결국 그것은 장르입니다

전용 웹 API 전용의 최고급 SQL로 인터넷 위의 네트워크 계층에서 작동하며보다 구체적으로 HTTP 프로토콜의 기능을 이용하지 않더라도 HTTP보다 우선합니다 따라서 특별히 설계된 웹 API를 위해 만들어졌습니다 사실, REST의 대안으로 판매되고 있습니다 사양으로 공개 된 형식입니다 공개적으로 페이스 북이 만든 공개 사이트이지만 표준이 아닙니다

중요한 일이 될 것입니다 실제로는 Facebook에 속한 것입니다 그들은 우리가 기여할 수있는 커뮤니티에 대한 액세스 권한을 남겨 뒀지 만 페이스 북 만이 관리하고 주도합니다 뭔가 좋은데 게이트웨이, API 게이트웨이에 대해서는 2015 년에 시작하면 결국 조금씩 볼 수 있습니다

그리고 자원 지향적 인 API 형식 인 REST와는 달리, 이것은 서비스 지향적 인 시스템입니다 즉, SOAP과 더 비슷합니다 우리가 오히려 원격 프로 시저를 호출하고 반대로 REST에 해당하는 데이터를 복구하려면 오히려 차이가있는 노출 된 리소스에 대해 HTTP와 상호 작용합니다 디자인의 기본 우리는 갑자기 보일 것입니다, 둘은 오히려 보완 될 수 있습니다

어떻게 작동합니까? GraphQL의 큰 관심은 고객이 필요한 데이터를 요청할 수 있습니다 그래서 그것은 과도하게 가져 오는 문제입니다 조금 더 자세하게 살펴 보겠습니다 그러나 그가 필요로하는 모든 데이터를 하나의 쿼리로 복구하십시오 따라서 우리가 필요로하는 모바일 앱을 상상할 수 있습니다

가장 인기있는 최신 기사 인 사용자 중 내가 승진 한 제품을 작성하십시오 나는 한 가지 요청으로 모든 것을 회복 할 수있다 REST에서 더 어려운 것은 사실 GraphQL의 큰 관심사입니다 고객이 필요한 것을 설명합니다 그것은 일종의 보스입니다

우리는이 요청을 서버에 보내고, 서버는 내가 요청한 것을 정확하게 보냅니다 확실한가요? 그래서, GraphQL 사이트에서 제공됩니다이 사이트는 문서 작업과 사이트가 매우 잘되어 있습니다 읽으라고 권유합니다 먼저 우리는 데이터 유형과 우리가 노출하는 국가의 API 그러면 우리는 GraphQL 쿼리 언어로 스키마를 기술 한이 API를 쿼리하십시오

그리고 JSON 출력은 실제로 GraphQL의 기본 원리입니다 그래서 사양에서, 우리는 다른 주요 기능을 가지고 있으며, 우리는 요청을 관리합니다 (우리는 세부적으로 보았습니다), 우리는 돌연변이의 관리를 가지고 있습니다 이것이 서버에서 상태를 변경할 수있게 해줍니다 우리는 그것이 서면의지지라고 말할 수 있습니다 실제로 그것은 정말로 될 것입니다

원격 프로 시저의 지향 호출, 우리는 실행할 수 있습니다 예를 들어 외부 코드를 사용하여 사용자 또는 그 물건을 주문 업데이트합니다 우리는 실험적인 사양은 여전히 ​​완벽하지는 않지만 좋은 점은 (개인적으로 GraphQL에서 가장 좋아하는 부분) 구독 정보 서버에서 데이터를 쿼리하고이 데이터가 언제든지 수정 될 때 서버에 알릴 수있는 아이디어가 있습니다 다른 클라이언트, 푸시 알림을 받고 싶습니다 갑자기 서버가 예를 들어 모바일 앱을 통해 장바구니가 변경되어 고객이 사무실을 밀고 나갈 때까지 실시간으로 즉시 변경됩니다 사용자 경험 측면에서 정말 좋습니다

즉, API와 상호 작용하는 모든 채널, 모든 클라이언트가 실시간으로 업데이트되고 푸시됩니다 유일한 문제는 Apollo라는 가장 널리 사용되는 구현에서 Websocket을 사용하므로 작동하지 않거나 매우 어렵다는 것입니다 실험 물건 (예 : 래칫 (ratchet) 및 PHP의 모든 것들)을 사용하면 어렵습니다 결과적으로 Nodejs, Go, 또는 그 종류의 언어

그런 다음 타입 시스템과 인트로 스펙 션 메커니즘이 있습니다 그래서 약간 비슷합니다 PHP 리플렉션 API (바로 뒤에서 보겠습니다) 우리는 매우 제한된 오류에 대한 명세를 가지고 있지만, 우리가 이미 본 일과 가능성을 만듭니다 가능한 한 병렬 처리하고 단일 HTTP 요청으로 여러 GraphQL 쿼리를 보냅니다 (HTTP 여부) 그런 다음 확장이 있습니다

이것이 GraphQL 스펙에있는 것이었고 우리는 GraphQL이라는 매우 유명한 확장을했습니다 : Relay GraphQL 사양 릴레이는 사실 페이스 북의 React 라이브러리이다 GraphQL의 클라이언트 인 Facebook에 의해 만들어지며 매우 인기 있고 매우 편리합니다 사실,이 클라이언트가 걸을 수 있으려면 서버가 다소 엄격한 형식을 따라야합니다 그래서 우리는 Node라는 개념을 가지고 있습니다

Java의 Object 유형과 같습니다 즉, 확장 된 슈퍼 오브젝트입니다 모든 유형의 GraphQL API는 모두 Node 유형입니다 그래서 우리는 객체 식별과 관련된 패턴을 가지고 있습니다 : GraphQL 객체의 ID는 반드시 고유해야합니다 1 일 수는 없습니다

UUID, URI (우리는 그 이후에 보게 될 것입니다)와 같습니다 노드가 1 2 3 4 인 객체를 요청할 때처럼, User 유형의 객체이거나 Cart 유형의 객체 인 경우에도 항상 복구됩니다 그것은 오히려 실용적이고 오히려 잘 생각됩니다 그런 다음 페이지 매김을 관리하기위한 전용 구조가 있습니다 (이후에 볼 것입니다) CRUD 지향적 돌연변이를위한 전용 포맷을 가지고있다 이 모든 것은 API 플랫폼에서 지원됩니다

다시 구현할 필요가 없습니다 이미 GraphQL로 전환 한 몇몇 거물들이 있습니다 Github의 경우입니다 Graphith와 Relay 인 Github API에 대한 쿼리 인 약간 더 완벽한 예제 나는 나의 유형 조직을 타자를 친다, 나는 매개 변수에서 통나무를 통과한다

티렐 (Tilleul)의 협력자들로부터 최근 공개 된 모든 기고 물을 되찾고 싶습니다 조직에서는이 조직의 ID 및 이름 필드 만 원합니다 그런 다음 원하는 방식으로 관계를 탐색하고 원하는 데이터를 정확히 물어볼 수 있습니다 저기, Tilleuls 직원의 목록, 첫 번째 100 싶습니다 여기에 컬렉션이있어서 구조가 있습니다

페이지 매김을 위해 릴레이에 의해 부과 된 데이터 내 컬렉션의 각 노드에 대해, 그래서 각 직원마다 ID, 로그인, 이름이 필요합니다 그런 다음이 직원의 공헌 목록을 원합니다 일부 매개 변수와 각 기여에 대해 우리가 기여한 Github 저장소, ID와 그의 이름이 필요합니다 정확히 내가 원하는 것을 말합니다 (다소 복잡한 쿼리입니다)

한 가지 요청으로 내가 원하는 것을 가지고 있으며 내가 아는 것을 게시 할 수 있습니다 우리는 실제로 GraphQL을 돌아 다녔습니다 그렇게 간단하고, 어쩌면 REST,이게 뭐야? 로이 필딩 (Roy Fielding) 논문이며 건축 스타일입니다 GraphQL과 달리 지정된 형식입니다 이것은 HTTP 프로토콜의 기능을 최대한 활용하는 것입니다 REST는 다른 사람들과 마찬가지로 API 트위터 (Facebook Twitter 앱)에서 절대적으로 존중하는 마케팅 용어로 사용되었습니다 필딩의 논문에서 정의 된 개념이 아닙니다

따라서 REST라고 불리는 것과 실제로 REST라는 것 사이에는 약간의 혼란이 있습니다 실제 REST API는 하이퍼 미디어라고합니다 이 혼란을 제거하기 위해 또 다른 용어가 사용됩니다 "마케팅"은 HATEOAS입니다 REST는 GraphQL과 달리 SOAP와 달리 자원 지향적 인 프로토콜입니다

아주 오랜 시간 동안 진짜 하이퍼 미디어 REST API를 만드는 방법에 대한 약간의 정글이었다 우리에게는 개념이 있었지만 형식은 없었습니다 다행히도 최근 몇 년 동안 우리는 이제 형식과 표준을 보유하고 있습니다 자체 검색 가능한 하이퍼 미디어 REST API의 작동 방식을 구체적으로 지정합니다 대부분은 W3C에 의해 설정된 표준입니다

이것은 열린 웹의 작동 방식을 표준화 한 조직과 동일합니다 HTML (현재 WhatWG가 있음) HTML, CSS, XML, RDF 열려있는 웹의 기초가되는 이러한 모든 형식은 W3C에 의해 정의되며 모든 브라우저와 개발자가 구현합니다 이제 REST API에 대해 비슷한 형식이 있습니다 첫 번째는 2014 년에 Google이 W3C에 기고 한 JSON-LD입니다

JSON 일뿐입니다 복잡한 유형 지원을 추가하고 기능을 추가 할 수있는 메타 데이터가 있습니다 하이퍼 미디어 (따라서 API 간의 링크 관리) 나는 여기에 너무 자세히 설명하지 않을 것이다 나는 이미 그것에 대해 confs를 주었다

세부 사항에 관심이 있다면 당신은 돌아올 것입니다 우리는 또한 Generator에 대해 이야기 한 Schemaorg를 가지고 있으므로 공개 된 어휘입니다 실제로는 사양이 아닙니다 오히려 허용하는 유형의 집합입니다

정확히 같은 이름과 동일한 유형의 서로 다른 API를 사용하는 동일한 유형의 데이터로 노출합니다 예를 들어, 그것이 Google의 리치 스 니펫이 작동하는 이유입니다 웹 사이트에 Schemaorg 마크 업을 추가해야합니다 이벤트, 이벤트의 이름은 그 장소의 가격입니다

하나는이 장소에서 티켓을 구입합니다 사양, Schemaorg에서 제공하는 이름 등이 있습니다 사실 공개 된 API를 노출하기 위해 수행되었습니다 이벤트 티켓을 검색 할 수있는 API를 제공하는 5 개의 사이트가있는 경우 모든 아이디어를 따르는 것이 좋습니다

이 명명 규칙은 JSON-LD 형식 (지난 가을 이후 Schemaorg의 기본 형식 임)과 함께 사용합니다 나는 모든 API를 소비 할 수있는 단일 일반 클라이언트가 필요합니다 이 API의 특정 문서를 읽어야합니다 이것은 실제로 하이퍼 미디어, REST, 열린 웹의 문제입니다

마지막으로 JSON-LD의 확장 인 Hydra를 사용해야합니다이 작업은 같은 작업 그룹에서 Google 등의 동일한 사용자가 JSON-LD (읽기 전용)를 추가하면됩니다 JSON-LD를위한 일종의 수퍼 슈거입니다 내 API를 노출하는 모든 유형을 설명 할 수 있습니다 내 API에서 사용할 수있는 모든 작업

내 속성이 읽혀 있습니까? 서면으로? 등등 그래서 우리는 API의 전체 구조를 알 수 있습니다 그것은 GraphQL 스키마와 동일한 것입니다 (아주 아주 가깝습니다) 둘 사이에는 많은 유사점이 있습니다 거기에 이러한 형식을 사용하는 다른 큰 선수가 있습니다 다른 사람들과 BBC가 있습니다

가장 잘 알려진 예는이 API를 포함한 새로운 Google API입니다 JSON입니다 REST와 비슷합니다 요청이 직접 전달 된 것을 볼 수 있습니다 우리가 항상 해왔 던 것처럼 url 매개 변수에서

이 문서는 JSON입니다 JSON-LD에 정의 된 @로 시작하는 일부 키가 예약되어 있다는 점을 제외하면, 메타 데이터를 상당히 고급화 할 수 있습니다 예를 들어, 특정 유형 JSON에서는 복잡한 유형이 없기 때문입니다 JSON-LD에는 복잡한 제목이 있습니다

그리고 매핑 Schemaorg 어휘를 사용합니다 예를 들어,이 설명은 Schemaorg / description에 해당합니다 우리는 조금 더 후에 볼 것입니다

우리는 모두 서로에게 좋은 대체 형식을 많이 가지고 있습니다 예 : json : api 및 OpenAPI 모두 매우 흥미 롭지 만 GraphQL과 같은 표준은 아닙니다 주제를 조금 더 깊이 들어 봅시다 API 플랫폼으로 자체 API를 만들어 보겠습니다

나는 당신에게 모든 기능을 발견하게하고, 이러한 모든 복잡한 형식을 따르는 하이퍼 미디어 REST API를 만드는 방법에 대해 1 시간 반을 가지고 있습니다 그리고 이러한 모든 복잡한 형식을 따르는 GraphQL API도 있습니다 그러나 나는 그것을 할 것이라고 생각합니다 충분히 쉽습니다 API Platform으로 시작하면 Design First 지향 API 프레임 워크입니다

먼저 API 클라이언트에서 사용할 항목을 디자인하십시오 내 공개 JSON에 무엇을 표시해야합니까? 그리고 당신은 그것을 어리 석고 불쾌한 PHP 클래스로 모델링했습니다 ID 속성이 있고 이름 속성이있는 작성자 문서를 노출하고 싶습니다 그게 내가 여기서하고있는 일이야 일부 메타 데이터를 추가합니다

필수 필자는 "@ApiResource"주석을 넣었습니다 PHPDoc을 넣었습니다 API 만 있으면 충분합니다 읽기와 쓰기의 지원없이 데이터베이스의 지속성 지속성을 원한다면 나 자신을 구현할 두 개의 인터페이스가 있습니다

Event Driven, CQRS를 사용합니다 나는 가질 필요가 없다 동일한 모델의 내부 데이터를 유지하고 공용 데이터 모델을 유지합니다 내가 R & D 모드에 있거나 프로토 타입을 만들거나 충분히 빠르게 개발하고 싶습니다 갑자기 선택적으로 doctrine과 통합 할 수 있으며 내 공개 데이터를 내부 데이터 모델과 매핑 할 수 있습니다

그것은 같은 클래스이다 그러나 의무적 인 것은 아니며 반드시해야 할 일은 사건에 달려 있습니다 내가 그렇게한다면, 나는 기반이되는 끈기가 있습니다 바로 그것으로, 나는 사용할 수있는 많은 기능 (우리가 보게 될)을 가진 완전한 REST API를 가지고있다 저기, 하이퍼 미디어이기 때문에, 나는 관계를 추가, 그래서 내 작가는 도서에 연결되어 있습니다

나도 할 일이별로 없어 이 주석에는 "@ApiProperty"가 있으며 선택 사항입니다 필자가 원하면 Schemaorg를 사용하여 매핑을 수행 할 수 있습니다 당신이 그것을 넣지 않으면, 어쨌든 작동하지만 나는 Schema

org와의 매핑을 가지지 않을 것이다 또한 Symfony Validator 구성 요소에 검증 어설 션을 추가 할 수 있으며 유효성 검사가 자동으로 고려됩니다 기본 API의 경우 (특정 작업을 수행하려는 경우 코드가 약간 있습니다), 할 일 이상이 없다 한계에서 개발자가 할 필요가 없습니다 일단 내가 그랬 으면

저의 뼈대에이 클래스들을 만들어서 GraphQL API를 가지고 있습니다 사용 가능한 두 가지 유형의 GraphQL API가 있습니다 그리고 인트로 스펙 션 (introspection) 기능에 액세스 할 수 있으므로이 특수 유형의 __schema를 사용할 수 있습니다

고객은 API가 어떤 유형을 공개하는지 물을 수 있습니다 내가 적용 할 수있는 연산들 (질의와 돌연변이) GraphiQL에서 제공하는 작은 도구에서이 설명서에서 탐색 할 수있는 기능은 다음과 같습니다 쿼리, 돌연변이, 타입은 무엇입니까? 그리고 PHPDoc이 자동으로 추출됩니다 그리고 인간이 읽을 수있는 문서를 준비하십시오

그것은 혼자 일합니다 실제로 API 플랫폼에서 클래스는 Symfony 구성 요소 (PropertyInfo 포함)를 사용하는 특수 메커니즘으로 구문 분석됩니다 중간 표현으로 저장됩니다 그래서 API Plateform에 공개하는 모든 유형을 나타내는 메타 데이터가 있습니다 모든 문서는 이러한 문서의 모든 속성을 모든 문서 사이의 관계

읽기 전용인가요? 설명 등은 무엇입니까? GraphQL API, REST API, Swagger 문서 등 모든 것이 이러한 메타 데이터에서 생성됩니다 따라서 새로운 형식을 추가하려는 경우 이미 중간 표현이 있기 때문에 쉽습니다 우리가 어제 봤던 정규화 된 심포니를하기 위해 우리가 추가하고 싶은 형식을 지원할 것입니다 이 다이어그램 GraphQL을 사용하여 "똑똑한"고객을 만들 수 있습니다 API가 GraphQL 사양을 존중하는 한, 누가 무엇을 사용할 수 있는지 발견하고 어떤 API로도 걸어 갈 수 있습니다

비즈니스 로직, 뒤에 정의 된 비즈니스 모델, 클라이언트, 인프라, 프로젝트에서 프로젝트 recode하지 않고도 기본 작동합니다 그리고 그것은 굉장합니다! GraphQL에만 국한된 것은 아니며 REST를 사용하여 오랫동안 해왔습니다 그리고 그것은 GraphQL의 "전에"판매 된 반면, 이전에 이야기했던 히드라는 똑같은 일을 할 수 있습니다 지능형 고객이 API를 발견 할 수 있도록 API의 전체 구조를 공개합니다 Plateform API는 두 가지를 모두 지원합니다

물론 코드 작성이 쉽지 않습니다 그러나 GraphQL API는 그다지 간단하지 않습니다 여기에 JSON 문서가 있습니다 이번에는 GraphQL과 달리 쿼리가 JSON이 아니며, 모든 속성이 모든 유형의 모든 클래스를 설명합니다 GraphQL 스키마와 정확하게 같습니다

두 가지의 차이는 물론 구현의 차이점이 있지만 개념적으로는 매우 비슷합니다 그래서 고객 측에서 할 수 있습니다 그 차이점과 정확히 똑같은 GraphQL과 달리 하이퍼 미디어 API입니다 즉, 서로 다른 API가 함께 공동 작업 할 수 있다는 것입니다 GraphQL API는 오히려 사일로 (silo)입니다

Facebook API 또는 Github API를 요청합니다 내 고객이 Facebook API에서 Github API로 전환하도록하십시오 동일한 애플리케이션에서 그렇게하는 것은 아닙니다 이를 위해 Hypermedia API가 만들어졌습니다 W3C의 RDF 포맷을 포함하여 훨씬 더 진보 된 것들과 많은 양립성이있다

(나는 오늘 그것에 대해 이야기하지 않는다) 이 공개 문서 형식으로 인해 관리자 생성기가 작동하고 관리자 생성기가 이 주체의 경우 사용할 수있는 모든 엔티티와 모든 유형 및 해당 HTML 필드 설정 : 선택, 날짜 피커 필드 등 이것은 필요한 모든 정보가 사전에 설명되어 있기 때문입니다 이제 데이터를 복구하려면 REST에서 당신은 그것에 익숙해 져야합니다 : 나는 URL을 통해 나의 데이터를 얻는다 나는 내 책에서 저자에게 관계가 있으며 두 번째 HTTP 요청을 만들어야합니다 그리고 그것은 성가신 일입니다

특히 HTTP2가 아닌 경우 성능 문제로 작성자 정보를 검색 할 수 있습니다 거기에는 이름이 있습니다 이는 잘 알려진 문제입니다 내가 목록을 가지고 있다면, 내 목록의 요소 + 내 목록을 표시하기위한 요청 = 11 요청을 내 목록을 표시하도록 요청해야합니다 성능면에서 끔찍한 것은 아닙니다

이것은 언더 페칭의 문제입니다 GraphQL에서는 정말 좋습니다 나는 지금 내가 책을 원한다고 말한다 그의 제목, 저자, 그의 이름 그리고 단일 질의에서, 나는 필요한 모든 것을 얻는다 훌륭합니다

선언적입니다 우아하고, URL에서 보낸 것보다 훨씬 명확합니다 나는 단 하나의 요청만을 가지고있다 언더 페칭 및 오버 페치 문제를 해결합니다 반면에 서버 측 구문 분석기가 필요합니다

글쎄 거기에는 너무 많은 문제가되지 않는 API 플랫폼이 있습니다 패리티가 없습니다 필자가 가지고있는 JSON 문서를 가져 와서 PUT으로 보내 문서를 업데이트 할 수는 없습니다 그것은 작동하지 않습니다 사실 REST에서 나는 그의 문제에 대한 해결책을 가지고있다

나는 직렬화 그룹을 추가한다 (우리가 어제 내 conf에서 본 바와 같이) 내 신원을 확인하고 자동으로 직접 중첩 된 작성자와 자신을 찾습니다 나는 over-fetching의 문제를 해결했다 어쨌든 작은 차이는 형식을 지정하는 서버입니다 고객은 말할 수 없습니다 이번에는 저자에게 발송해야합니다

이 다른 쿼리의 경우에는 필요하지 않습니다 그래도 GraphQL보다 조금 더 나쁩니다 Sparse Fieldsets이라는 또 다른 솔루션이 있습니다 이번에는 약간의 주석을 달았습니다 "@ApiFilter (PropertyFilter :: class)"라고하며 여기에서는 어제 내 이야기에서 본 기능을 사용합니다

Symfony 시리얼 라이저의 속성 컨텍스트, 나는 단지 내 URL 매개 변수를 전달할 수 있습니다 속성은 무엇입니까? 나는 관계에 포함 시키길 바래요 같은 언어가 아니라 덜 우아합니다 URL에서 보내는 고전적인 GET 요청 GraphQL보다 훨씬 덜 우아하지만, 똑같은 일을하고 문제를 해결합니다

그리고 또 다른 장점은, 덜 우아하다는 것입니다 우리는 완전히 동의합니다 하지만 PHP에서는 Javascript로, 모든 프로그래밍 언어에서 이것은 HTTP 프로토콜에 있으며 수년간 구현되어 작동합니다 특정 파서가 필요 없습니다 필터

엔티티 검색과 같은 필터를 추가합니다 그것은 APIPlatform과 같습니다 기본을 구현하는 것입니다 당신이 Doctrine을 사용한다면 그리고 REST에서 매개 변수를 전달할 수 있습니다

내 필터링이 완료되었습니다 내 필터는 문서에 설명되어 있습니다 APIPlatform에서 제공하는 히드라 그래서 내 똑똑한 고객이 그것을 사용할 수있을거야 GraphQL에서 내가 추가 한 것과 동일한 주석을 사용하여 놀라움은 없었습니다

GraphQL에서 필터에 대한 지원을 받았고 여기에서 매개 변수로 전달했습니다 그것은 거의 같은 방식으로 작동합니다 정렬 추가 할 주석입니다 나는 모든 분야를 일일이 정리하고 싶다

그런 다음 URL에서 보내는 설정을 제목과 설명별로 정렬하고 싶습니다 호프, 올바른 순서에요 또한, 제가 적용 할 수있는 주문 필터는 Hydra에게 감사드립니다 GraphQL에서 GraphQL에는 같은 것을 지원합니다 GraphQL과 REST 간에는 여전히 많은 유사점이 있습니다 페이지 매김 더 복잡하지는 않습니다

APiPlatform을 사용하면 보안상의 이유로 기본적으로 활성화됩니다 너는 할 일이 없어 귀하의 페이지에 30 개 이상의 요소가있는 즉시, 너는 할 수있어 당신에게 페이지 번호를 줄 매개 변수를 추가했습니다 물론 페이지 당 요소 수 등을 구성 할 수 있습니다

내 문서 Hydra에서는 다시 한 번 클라이언트 측에서 내 컬렉션을 탐색 할 수있는 모든 메타 정보가 제공됩니다 미리 알 필요가 없습니다 GraphQL에서는 릴레이 스펙에 구현되어 있습니다 슬라이더 페이지 매김이기 때문에 약간 다릅니다 API 플랫폼에서도 기본적으로 지원됩니다

기본적으로 작동하며 기본적으로 사용하도록 설정되어 있습니다 쓰기 요청을하십시오 클래식 PUT 요청을 만들어 작동합니다 API Platform에서는 기본적으로 지원됩니다 GraphQL에는 약간 복잡한 것이 있습니다

우리는 같은 요청에 여러 개의 돌연변이를 보낼 수 있습니다 기본이기 때문에 자체적으로 작동합니다 clientMutationId는 요청을 보낼 때 ID를 설정해야하는 클라이언트입니다 우리는 같은 요청에 여러 개의 돌연변이를 보낼 수 있습니다 대답을 얻었을 때 서버 측에서 허용 할 것입니다

해당 요청에 대해 알기 페어링을 할 수있게 해줍니다 이것은 알아야 할 유일한 것입니다 자, 이제 우리는 지난 5 분 동안 조금 성가 시게되는 부분을 계속합니다 그래서 우리는 GraphQL을 얻었습니다

고급 REST 형식과 거의 동일한 기능을 갖추고 있습니다 GraphQL, 관심은 그것이 스스로 발견 할 수있는 API 등을 대중화했다는 것입니다 우리는 그것이 초현대적 인 것을 보았습니다, 처음부터 매우 잘 생각되었습니다 실제로 처리하기에 매우 유용한 것이지요 특히 우리가 할 때 반응 클라이언트 측면, 잘하는 모든 장비 때문에 React, 페이스 북이 GraphQL API를 사용하기 때문에 정말 빠르게 진행되고있다

이제 화가 난 파티가 이미 로그 그래서 그것은 내 REST 로그입니다

POST에서 내 요청을 실제로 볼 수 있습니다 PUT 등에서 고전적인 로그가 꽤 명확합니다 그것이 내 GraphQL 로그입니다 모든 것은 endpoint / graphql을 향해 POST됩니다 나는 세부 사항이 없다

독서, 작문인지 나는 모른다 adminSys의 경우 매우 지루합니다 나는 애플리케이션 측면에서 모든 것을 관리해야한다 이것은 첫 번째 잘못입니다 그런 다음 캐시

API Plateform (매우 빠르게 전달)에서 하이퍼 미디어 기능과 함께 작동하는 상당히 고급 캐시 메커니즘입니다 기본적으로 Varnish를 활성화 할 때 모든 쿼리 (설정 옵션이 있습니다) 그들은 PHP에 의해 한 번 생성 된 다음 몇 밀리 초 안에 항상 Varnish가 제공합니다 정말 빨라지고 있습니다 그리고 리소스에 대한 쓰기 요청을받는 즉시, 이 리소스 또는 리소스에 대한 참조가 포함 된 서버에서 생성 된 HTTP 응답을 감지하고, 컬렉션,리스트, 관계, 모든 것, 그리고 우리 모두가 제거하려고합니다 따라서 데이터는 항상 멋지지만 PHP는 최대한 적게 제공합니다

불행히도 PHP는 여전히 Varnish보다 느리고 항상 그렇습니다 문제 : GraphQL에서 모든 것이 POST입니다 갑자기 GraphQL과 함께 HTTP 캐시가 작동하지 않습니다 애플리케이션 레벨에서 캐시를 만들어야합니다 즉, REST를 사용하면 응용 프로그램 캐시를 배치 할 수 있습니다

예를 들어 doctrine cache, doctrine data cache 캐시 몇 개 넣었어요 HTTP 서버 측 클라이언트 측 HTTP 캐시 및 응용 프로그램 캐시 (localStorage 유형, sessionStorage) 클라이언트 측, 맨 위 GraphQL에서는 캐시 할 수 있지만 HTTP 프로토콜의 기능을 잃게됩니다 이는 서버 측의 서버 측 응용 프로그램 캐시 일 것입니다

그것도 우리 adminSys, 우리의 확장 성 등을 위해 빨리 성가시다 Facebook이나 Github의 엔지니어링 기능이없는 경우 그것은 또한 신속하게, perfs의 문제를 제기 할 수 있습니다 우리의 질의는 매우 동적이어서 매우 좋은 기회가 있기 때문에, 데이터베이스에 색인을 입력하지 않는다는 것입니다 이것은 REST Spars Fieldsets과 동일한 문제입니다 이것에 비밀이 없다

Neo4J의 큰 GraphQL API는 일반적으로 ElasticSearch를 사용하여이 인덱스를 설정합니다 PostgreSQL 또는 MySQL을 사용하는 경우, REST, Sparse Fieldset 또는 GraphQL과 상관없이, 당신이 무엇을 할 것인지 조심해야합니다 DDoS 공격 벡터를 생성하여 성능 또는 보안 문제를 만듭니다 보안 및 신뢰성에 관해서는, REST는 하이퍼 스퀘어 (hyper square)입니다 OWASP 스펙은 정확히 무엇을해야 할지를 말합니다

플랫폼 API에 의해 구현되는 방식입니다 우리는 API가 안전하다는 것을 증명할 수있는 많은 문서를 가지고 있습니다 우리는 API에 대해 많은 피드백을 가지고 있습니다 GraphQL을 사용하면 훨씬 더 새롭고 훨씬 덜 돌아갑니다 이미 거기에서 악용 된 몇 가지 큰 결함이있었습니다

그리고 우리는 클라이언트가 모든 유형의 쿼리를 그대로 실행하도록 할 수 있기 때문에 DDOS가 공격하는 큰 벡터입니다 보호 메커니즘이 있습니다 그것들은 webonyx / graphql-php 라이브러리, timeout의 타입, 유형은 검색어의 복잡성을 제한하지만 여전히 덜 알려져 있고 관점 보안에서 더 많은 관심을 기울일 필요가있다 신뢰성 측면에서 볼 때, 우리는 일을 잘 할 수 있습니다 우리는 항상 그렇지만, 여전히 REST보다 훨씬 성숙한 것입니다

그리고 내가 많이 사용했던 Github API조차도 (프로젝트를 수행하고이 대화를 준비하고 있기 때문에) 때로는 그렇게 복잡하지 않은 쿼리에 대해서, 내가 방금 전에 보여준 것입니다 벤 그는 충돌한다 그들의 REST API를 사용하는 동안, 그녀는 재배하고 있었지만 여전히 그 이상이었다 그래서 여전히 무언가가 있습니다 무서운 팀과 개발자는 자신이하는 일을 두려워하지 않는다는 것을 알고 있습니다

낮은 수준의 레이어를 변경하려고합니다 GraphQL의 큰 장점 : 버전 없음 우리는 유형과 필드를 평가할 수 있습니다 사실 REST에서는 똑같은 일을 할 수 있습니다 그것은 API 진화 및 티저라고

REST 및 GraphQL 용 API 플랫폼의 차기 버전에서 사용할 수 있지만 여전히 그렇습니다 클라이언트 측에서는 API 플랫폼, API 플랫폼, Hydra와 JSON-LD에 대한 모든 것입니다 반면에, 내가 말한 페이스 북 생태계 인 GraphQL의 큰 장점은, 클라이언트 쪽에서 꽤나 놀라운 것들을 할 수있게 해줍니다 아직 REST 측과 같은 레벨에 있지 않습니다 그래서 여기에서 페이스 북의 풀 스택을 사용한다면, REST 측면을 진화 시키더라도 여전히 모든 GraphQL 측면에서 나쁘지 않습니다

마침내, 어제 conf의 약간의 에코, GraphQL을 조심하십시오 Facebook에서 Facebook을 통해 수행되는 사일로 (silo)에서 완료되었습니다 이는 매우 중앙 집중적 인 웹용으로 제작되었으며, 모든 데이터가 한 공급자에 의해 제공됩니다 이것은 기본적인 Facebook 사용의 경우입니다 반대로 W3C는 REST에 대한 공개 사양이 분산 된 웹에 대해 수행된다는 사실을 매우 경계합니다

서로 다른 소스의 데이터를 모아서 기본 프로토콜로 설계 할 수 있어야한다 테크노 페이스 북과 페이스 북은 특히 작은 문제가 많이 발생했습니다 "Cambridge Analytica"와 그 모든 것 이러한 데이터 집중을 허용함으로써 개발자가하는 일은 중대한 윤리적 인 결과를 낳습니다 또한 형식과 사용 방식과도 관련이 있습니다

그래서 여기에서도 API를 할 때 눈을 감은 상태로 조치를 취하십시오 간단한 기술보다 조금 더 생각해보십시오 실제로 릴레이, 정말 잘 작동합니다 어쩌면 그 포즈 (당신이 일하는 분야에 따라), 그것은 윤리적 관점에서 조금 더 중요한 문제를 제기합니다 요약하면

GraphQL은 훌륭합니다 멋지고 멋지 네요 정말 좋았습니다 생태계는 완벽했고 기본적이고, API 플랫폼에는 그리 많지 않습니다 직접 해보는 경우 구현하기가 쉽지 않고 가장 흥미로운 기능입니다

PHP에서 PHP를 사용하지 않아도됩니다 실시간으로 진행되기 때문에 Nodejs 또는 Go로 이동하십시오 REST, 마침내 거의 같은 일을 조금 더 할 수 있습니다 늙고, 조금 덜 우아하지만 훨씬 더 성숙하고 더 많은 피드백이 있습니다 또한 GraphQL API, 자신이 관리하는 모바일 앱의 내부 프로젝트에 대해 복잡한 쿼리를 작성하는 등 마침내 꽤 비슷한 기능을 가진 성숙한 REST의 공용 API, 동일한 코드로 API 플랫폼을 사용하면 두 가지 형식 모두를 노출 할 수 있습니다 고맙습니다

JIRA REST API Tutorial – Introduction

프로그래밍 방식으로 JIRA 정보를 가져 오려면 JIRA REST API를 사용해야합니다

요컨대 REST API는 간단한 HTML 요청을 통해 JIRA와 통신하고 데이터를 가져올 수있는 인터페이스입니다 공식 튜토리얼은 조금 복잡해 보일지 모르지만 그것은 꽤 간단합니다 우리가 JRA-9 문제로 작업 중이며 의견, 예상 노력 및 작업 기록과 같은 정보를 가져와야한다고 결정했다고 가정합니다 우리는 REST API에 대한 HTML 요청을 할 것입니다 나는 당신에게 보여주기 위해 그것을 브라우저를 통해 할 것이다

"/ rest / api / latest / issue /"또는 "/ rest / api / XXX / issue /"(XXX은 시스템에서 사용중인 API 버전)의 URL 경로를 "/ browse /"에서 " json "끝에 JIRA가 우리에게 많은 데이터를 돌려주었습니다 이것들은 조밀 한 JSON 형식의 JRA-9 이슈입니다 따라서 개발중인 프로그램 / 클라이언트 / 스크립트가 무엇이든간에 JSON 형식을 설계된 데이터 구조로 구문 분석해야합니다 가독성을 위해 반환 된 데이터를 다시 포맷하겠습니다 보시다시피 이제 JRA-9에 대한 모든 것이 우리가 사용할 준비가되었습니다

JSON을 구문 분석하기 만하면됩니다 이 튜토리얼에서는 VBA를 사용하여 JIRA에서 Microsoft Excel로 데이터를 가져와야한다고 가정 해 보겠습니다 개념은 여전히 ​​동일하므로 VBA 코드에서 REST API로 HTTP 요청을 만들어 데이터를 검색해야합니다 시간을 절약하기 위해 버튼과 일부 초안 매크로가있는 통합 문서를 준비했습니다 첫 번째 줄은 WinHTTPRequest 객체를 정의하여 HTTP 요청을 만드는 데 사용합니다

그런 다음 이전에 사용한 URL과 동일한 URL로 GET 요청을 REST API에 보냅니다 요청을 보내고 Button을 클릭하면 반환 된 데이터를 Msgbox에 저장하는 코드가 더 추가됩니다 성공! 이제 우리는 JSON! 나머지 작업은 당신이 사용할 수있는 VBA-JSON과 같은 무료 라이브러리가있는 JSON을 파싱합니다 REST API 관련 부분이 여기에서 끝나는대로 VBA에서 JSON을 구문 분석하는 방법을 다른 동영상에서 보여 드리겠습니다 다음 동영상이 곧 출시 될 예정입니다

시청 해주셔서 감사합니다!!!

#2 CodeIgniter 3.x Restful API Library – REST API Debugging Tools for Developing APIs

먼저 URL에서 indexphp 텍스트를 제거하고 API 경로를 정의하십시오

프로젝트 루트 디렉토리에 htaccess 파일을 만듭니다 이 코드를 복사하여 htaccess 파일에 붙여 넣으십시오 이제 API 경로를 실행하는 indexphp 텍스트없이 url을 확인하십시오

API는 indexphp 텍스트없이 완벽하게 실행됩니다 이제 경로 설정 파일에 API 경로를 만듭니다 이렇게 API Route Working insomnia Debug APIs Software를 다운로드하십시오

설명의 링크 새 API 요청을 만듭니다

JIRA REST API Tutorial – Pulling Issue Worklog

이전 튜토리얼에서는 REST API를 통해 문제 정보를 가져 오는 방법에 대해 설명했습니다 이 비디오에서는 작업 로그를 가져 오는 방법에 초점을 맞 춥니 다

일반적으로 REST API를 통해 문제를 가져 오면 작업 로그가 반환 된 입력란에도 포함됩니다 "worklog"라는 단어를 검색해 봅시다 압축 된 JSON 형식은 눈으로 읽을 때 조금 어려우므로이를 온라인 JSON 파서에 복사합니다

이제 훨씬 나아! worklog 요소를 찾으십시오 (API 요청을했을 때 필드를 지정하지 않았으므로 많은 양의 데이터가 표시됩니다) 그곳에! 각 작업 로그에 대한 모든 정보는 여기에서 볼 수 있습니다

작업 기록은 "timeSpent"필드에 저장됩니다 형식은 사용자가 입력 한 내용 (025h 또는 25m)에 따라 분 또는 시간이 될 수 있습니다 그러나 표준 단위를 원한다면 "timeSpentSeconds"를 사용하고 수동으로 계산해야합니다 작업 로그와 관련된 주석은 "주석"필드에 있습니다 이 방법으로 작업 로그를 가져 오는 단점은 반환 된 작업 로그의 한계가 있다는 것입니다 "maxResults"필드는 제한이 20임을 나타냅니다

따라서 문제에 20 개 이상의 작업 로그가 있으면 문제가 해결됩니다 문제마다 모든 작업 로그를 제대로 가져 오려면 다른 방법을 사용해야합니다 이전과 같은 요청 URL을 사용하지만 "json"접미어를 "/ worklog"로 변경하십시오 이제이를 JSON 파서에 복사 해 봅시다 (우리가 관심이없는 분야를 최소화하자) 이번에는 API가 작업 로그 만 반환하고 다른 모든 입력란은 삭제되었지만 형식은 동일합니다

결과에 제한이 없습니다 "maxResults"는 항상 "총"작업 로그 수와 같습니다 그러나 템포 시트 시트 플러그인을 설치 한 경우 그들은 더 많은 사전 작업 로그 쿼리를 할 수 있도록 자신의 출퇴근 시간 기록 용지 API를 제공했습니다 Tempo 작업 표 APi는 특정 사용자 및 날짜 범위에 대해 작업 로그를 쿼리 할 수 ​​있다는 점을 제외하면 JIRA REST API와 매우 유사합니다 이 매개 변수를 요청 URL 끝에 추가하면 완료됩니다

안타깝게도, Tempo API를 가지고 있지 않다면 각 사용자에 대해 작업 로그 보고서를 가져 오는 방법에 대한 대체 방법을 찾아야 할 것입니다 나는 곧 다음 비디오에서 당신을 보여줄거야 시청 해주셔서 감사합니다! 구독 튜토리얼 더 🙂