분류 php

php-crud-api

컨텐츠 정보

  • 조회 426 (작성일 )

본문

SQL 데이터베이스에 REST API를 추가하는 단일 파일 PHP 스크립트.


https://github.com/mevdschee/php-crud-api 


MySQL 5.6 InnoDB 데이터베이스에 REST API를 추가하는 단일 파일 PHP 7 스크립트. PostgreSQL 9.1 및 MS SQL Server 2012는 완벽하게 지원됩니다.

NB : 이것은 PHP의 TreeQL 참조 구현입니다.


관련 프로젝트 :

  • PHP-API-AUTH : PHP-CRUD-API의 인증 공급자 인 단일 파일 PHP 스크립트
  • PHP-SP-API : REST API를 SQL 데이터베이스에 추가하는 단일 파일 PHP 스크립트.
  • PHP-CRUD-UI : PHP-CRUD-API 프로젝트에 UI를 추가하는 단일 파일 PHP 스크립트.
  • VUE-CRUD-UI : PHP-CRUD-API 프로젝트에 UI를 추가하는 단일 파일 Vue.js 스크립트.
  • PHP-CRUD-ADMIN : PHP-CRUD-API 프로젝트에 데이터베이스 관리 인터페이스를 추가하는 단일 파일 PHP 스크립트.

다음 위치에도 이 스크립트의 포트가 있습니다.

PHP, Java, Go, C # .net core, Node.jsPython에서 기본 REST CRUD 기능 만 지원하는 이 스크립트의 개념 증명 포트도 있습니다.


요구 사항 


  • MySQL, PgSQL, SqlSrv 또는 SQLite 용 PDO 드라이버가 활성화 된 PHP 7.0 이상
  • MySQL의 공간 기능을 위한 MySQL 5.6 / MariaDB 10.0 이상
  • PostgreSQL 9.1 이상의 공간 기능을위한 PostGIS 2.0 이상
  • SQL Server 2012 이상 (Linux 지원의 경우 2017)
  • SQLite 3.16 이상 (공간 기능은 지원되지 않음)

설치 


이것은 단일 파일 응용 프로그램입니다! 어딘가에 "api.php"를 업로드하고 즐기십시오!


로컬 개발의 경우 PHP의 내장 웹 서버를 실행할 수 있습니다.

php -S localhost:8080

다음 URL을 열어 스크립트를 테스트합니다.

http://localhost:8080/api.php/records/posts/1

파일 하단에서 구성을 수정하는 것을 잊지 마십시오.


또는 이 프로젝트를 원하는 웹 프레임 워크에 통합 할 수 있습니다. 다음을 참조하십시오.


이러한 통합에서 Composer는 이 프로젝트를 종속성으로 로드 하는 데 사용됩니다.


구성 


"api.php"파일 하단에서 다음 줄을 편집합니다.


$config = new Config([
    'username' => 'xxx',
    'password' => 'xxx',
    'database' => 'xxx',
]);

다음은 모든 구성 옵션과 대괄호 사이의 기본값입니다.

  • "driver": mysql, pgsql, sqlsrv or sqlite (mysql)
  • "address": Hostname (or filename) of the database server (localhost)
  • "port": TCP port of the database server (defaults to driver default)
  • "username": Username of the user connecting to the database (no default)
  • "password": Password of the user connecting to the database (no default)
  • "database": Database the connecting is made to (no default)
  • "tables": Comma separated list of tables to publish (defaults to 'all')
  • "middlewares": List of middlewares to load (cors)
  • "controllers": List of controllers to load (records,geojson,openapi)
  • "openApiBase": OpenAPI info ({"info":{"title":"PHP-CRUD-API","version":"1.0.0"}})
  • "cacheType": TempFile, Redis, Memcache, Memcached or NoCache (TempFile)
  • "cachePath": Path/address of the cache (defaults to system's temp directory)
  • "cacheTime": Number of seconds the cache is valid (10)
  • "debug": Show errors in the "X-Exception" headers (false)
  • "basePath": URI base path of the API (determined using PATH_INFO by default)


모든 구성 옵션은 환경 변수로도 사용할 수 있습니다. 구성 옵션을 대문자, "PHP_CRUD_API_"접두사 및 단어 분리를 위한 밑줄로 작성하십시오. 예를 들면 다음과 같습니다.


  • PHP_CRUD_API_DRIVER=mysql
  • PHP_CRUD_API_ADDRESS=localhost
  • PHP_CRUD_API_PORT=3306
  • PHP_CRUD_API_DATABASE=php-crud-api
  • PHP_CRUD_API_USERNAME=php-crud-api
  • PHP_CRUD_API_PASSWORD=php-crud-api
  • PHP_CRUD_API_DEBUG=1

환경 변수는 PHP 구성보다 우선합니다.


한계 


이러한 제한 및 제약이 적용됩니다.

  • 기본 키는 자동 증가 (1 ~ 2 ^ 53) 또는 UUID 여야 합니다.
  • 복합 기본 및 복합 외래 키는 지원되지 않습니다.
  • 복잡한 쓰기 (트랜잭션)는 지원되지 않습니다.
  • 함수를 호출하는 복잡한 쿼리 (예 : "concat"또는 "sum")는 지원되지 않습니다.
  • 데이터베이스는 외래 키 제약을 지원하고 정의해야 합니다.
  • SQLite는 bigint 유형의 자동 증가 기본 키를 가질 수 없습니다.
  • SQLite는 테이블 열 (구조) 변경을 지원하지 않습니다.

특징


다음 기능이 지원됩니다.

  • Composer 설치 또는 단일 PHP 파일, 배포하기 쉽습니다.
  • 코드가 매우 적고 조정 및 유지 관리가 쉽습니다.
  • 입력으로 POST 변수 지원 (x-www-form-urlencoded)
  • 입력으로 JSON 객체 지원
  • 입력으로 JSON 배열 지원 (일괄 삽입)
  • 유형 규칙 및 콜백을 사용하여 입력을 삭제하고 유효성을 검사합니다.
  • 데이터베이스, 테이블, 열 및 레코드에 대한 권한 시스템
  • 다중 테넌트 단일 및 다중 데이터베이스 레이아웃이 지원됩니다.
  • 도메인 간 요청에 대한 다중 도메인 CORS 지원
  • 여러 테이블에서 조인 된 결과 읽기 지원
  • 여러 기준에 대한 검색 지원
  • 페이지 매김, 정렬, 상위 N 목록 및 열 선택
  • 중첩 된 결과 (belongsTo, hasMany 및 HABTM)를 사용한 관계 감지
  • PATCH를 통한 원자 증가 지원 (카운터 용)
  • base64 인코딩으로 지원되는 이진 필드
  • WKT 및 GeoJSON에서 지원되는 공간 / GIS 필드 및 필터
  • OpenAPI 도구를 사용하여 API 문서 생성
  • JWT 토큰 또는 사용자 이름 / 암호를 통한 인증
  • 데이터베이스 연결 매개 변수는 인증에 따라 달라질 수 있습니다.
  • JSON에서 데이터베이스 구조 읽기 지원
  • REST 끝점을 사용하여 데이터베이스 구조 수정 지원
  • 보안 강화 미들웨어 포함
  • 표준 준수 : PSR-4, PSR-7, PSR-12, PSR-15 및 PSR-17


편집 


다음 명령어를 사용하여 이 프로젝트의 모든 종속 항목을 설치할 수 있습니다.


php install.php

다음을 사용하여 모든 파일을 단일 "api.php"파일로 컴파일 할 수 있습니다.

php build.php

주의 : 설치 스크립트는 PHP 7.0 호환성을 위해 공급 업체 디렉토리의 종속성을 패치합니다.


개발 


다음 URL에서 컴파일 되지 않은 코드에 액세스 할 수 있습니다.

http://localhost:8080/src/records/posts/1

컴파일 되지 않은 코드는 "src"및 "vendor"디렉토리에 있습니다. "공급 업체"디렉토리에는 종속성이 포함되어 있습니다.


종속성 업데이트 


다음 명령어를 사용하여 이 프로젝트의 모든 종속성을 업데이트 할 수 있습니다.

php update.php

이 스크립트는 Composer를 설치하고 실행하여 종속성을 업데이트합니다.


주의 : 업데이트 스크립트는 PHP 7.0 호환성을 위해 공급 업체 디렉토리의 종속성을 패치합니다.


TreeQL, a pragmatic GraphQL 


TreeQL을 사용하면 SQL 데이터베이스 구조 (관계) 및 쿼리를 기반으로 JSON 개체의 "트리"를 만들 수 있습니다.


느슨하게 REST 표준을 기반으로 하며 json : api에서 영감을 받았습니다.


CRUD + List 


예제 posts 테이블에는 몇 개의 필드 만 있습니다.

posts  
=======
id     
title  
content
created

아래의 CRUD + List 작업은 이 테이블에서 작동합니다.


Create 


레코드를 생성하려면 요청을 다음과 같은 URL 형식으로 작성할 수 있습니다.


POST /records/posts

다음을 포함하는 본문을 보내야 합니다.

{
    "title": "Black is the new red",
    "content": "This is the second post.",
    "created": "2018-03-06T21:34:01Z"
}

그리고 새로 생성 된 레코드의 기본 키 값을 반환합니다.

2

Read 


이 테이블에서 레코드를 읽으려면 요청을 다음과 같은 URL 형식으로 작성할 수 있습니다.

GET /records/posts/1

여기서 "1"은 읽으려는 레코드의 기본 키 값입니다. 다음을 반환합니다.


{
    "id": 1
    "title": "Hello world!",
    "content": "Welcome to the first post.",
    "created": "2018-03-05T20:12:56Z"
}

읽기 작업에서 조인을 적용 할 수 있습니다.


Update 


이 테이블의 레코드를 업데이트하기 위해 요청을 다음과 같은 URL 형식으로 작성할 수 있습니다.

PUT /records/posts/1

여기서 "1"은 업데이트 할 레코드의 기본 키 값입니다. 본문으로 보내기 :

{
    "title": "Adjusted title!"
}

게시물의 제목을 조정합니다. 반환 값은 설정된 행 수입니다.

1

Delete 


이 테이블에서 레코드를 삭제하려는 경우 요청을 다음과 같은 URL 형식으로 작성할 수 있습니다.

DELETE /records/posts/1

그리고 삭제 된 행의 수를 반환합니다.

1

List 


이 테이블의 레코드를 나열하기 위해 요청을 다음과 같은 URL 형식으로 작성할 수 있습니다.


GET /records/posts

다음을 반환합니다.


{
    "records":[
        {
            "id": 1,
            "title": "Hello world!",
            "content": "Welcome to the first post.",
            "created": "2018-03-05T20:12:56Z"
        }
    ]
}

목록 작업에서 필터와 조인을 적용 할 수 있습니다.


api