<code>URL HTTP Method Operation /api/contacts GET 返回联系人数组 /api/contacts/:id GET 返回 ID 为 :id 的联系人 /api/contacts POST 添加一个新联系人并返回它(添加了 id 属性) /api/contacts/:id PUT 更新 ID 为 :id 的联系人 /api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人 /api/contacts/:id DELETE 删除 ID 为 :id 的联系人 /api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹 /api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人 /api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记 /api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记 /api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
도구 및 설정
API를 구축하는 데 사용할 기본 도구는 슬림 프레임 워크입니다. 왜? & gt; [[]는 간단하고 강력한 웹 응용 프로그램과 API를 신속하게 작성하는 데 도움이됩니다. <.> 이것은 사실입니다. 강력한 라우팅 기능은 Get and Post 이외의 사용 방법을 쉽게 사용할 수 있으며 HTTP 메소드 오버라이드 (HTTP 헤더 및 숨겨진 포스트 필드를 통해)에 대한 내장 지원을 제공하고 미들웨어 및 추가 기능을 사용하여 응용 프로그램 및 API를 활성화 할 수 있습니다. 개발은 정말 쉽습니다. Slim과 함께 Idiorm을 사용하여 데이터베이스 계층에 액세스하고 독백을 사용하여 로깅을합니다. 따라서 Composer.json 파일은 다음과 같습니다
슬림/엑스트라 및 슬림/미들웨어 패키지는 컨텐츠 유형 해상도 및 기본 인증과 같은 유용한 기능을 제공합니다. 우리의 사용자 정의 클래스는 API 네임 스페이스와 LIB 디렉토리에 있습니다. 이 시점에서 작업 디렉토리 구조는 다음과 같습니다.
<code class="language-json">{ "name": "yourname/my-contacts", "description": "Simple RESTful API for contacts management", "license": "MIT", "authors": [ { "name": "Your Name", "email": "you@yourdomain.com" } ], "require": { "slim/slim": "*", "slim/extras": "*", "slim/middleware": "*", "monolog/monolog": "*", "j4mie/paris": "*", "flynsarmy/slim-monolog": "*" }, "archive": { "exclude": ["vendor", ".DS_Store", "*.log"] }, "autoload": { "psr-0": { "API": "lib/" } } }</code>부팅 프로그램 및 프론트 엔드 컨트롤러
앞에서 언급했듯이 bootstrap.php 파일은 응용 프로그램 설정 및 자동 로더 설정을로드 할 책임이 있습니다.
<code>URL HTTP Method Operation /api/contacts GET 返回联系人数组 /api/contacts/:id GET 返回 ID 为 :id 的联系人 /api/contacts POST 添加一个新联系人并返回它(添加了 id 属性) /api/contacts/:id PUT 更新 ID 为 :id 的联系人 /api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人 /api/contacts/:id DELETE 删除 ID 为 :id 的联系人 /api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹 /api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人 /api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记 /api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记 /api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
<code class="language-json">{ "name": "yourname/my-contacts", "description": "Simple RESTful API for contacts management", "license": "MIT", "authors": [ { "name": "Your Name", "email": "you@yourdomain.com" } ], "require": { "slim/slim": "*", "slim/extras": "*", "slim/middleware": "*", "monolog/monolog": "*", "j4mie/paris": "*", "flynsarmy/slim-monolog": "*" }, "archive": { "exclude": ["vendor", ".DS_Store", "*.log"] }, "autoload": { "psr-0": { "API": "lib/" } } }</code>
Slim에는 Route Groups라는 멋진 기능이 있습니다. 이 기능을 사용하면 다음과 같은 응용 프로그램 경로를 정의 할 수 있습니다.
<code>bootstrap.php composer.json README.md bin/ import install lib/ API/ public/ .htaccess index.php share/ config/ default.php db/ logs/ sql/ data/ contacts.sql users.sql tables/ contacts.sql notes.sql users.sql ssl/ mysitename.crt mysitename.key</code>
우리의 JSON 미들웨어는 "JSON Response Only"와 "JSON Encoding Body"라는 두 가지 모범 사례를 구현합니다. 이 방법은 다음과 같습니다.
인증
이 메소드는 Auth Token에 대한 php_auth_user 요청 헤더를 검색하고 존재하지 않거나 유효하지 않은 경우 401 금지 상태 및 인증 헤더를 클라이언트에게 전달합니다. verify () 메소드는 보호되므로 내 버전은 간단합니다
REST 버전 API 버전을 사용하면 기존 클라이언트에 영향을 미치지 않고 비파괴적인 변경 사항을 도입 할 수 있습니다. URL에 버전 번호를 포함 시키거나 사용자 정의 요청 헤더를 사용하여 API를 버전 할 수 있습니다. 모든 변경 사항을 기록하고 API 소비자에게 새 버전 및 해당 기능을 알리십시오.
<code>URL HTTP Method Operation
/api/contacts GET 返回联系人数组
/api/contacts/:id GET 返回 ID 为 :id 的联系人
/api/contacts POST 添加一个新联系人并返回它(添加了 id 属性)
/api/contacts/:id PUT 更新 ID 为 :id 的联系人
/api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人
/api/contacts/:id DELETE 删除 ID 为 :id 的联系人
/api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹
/api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人
/api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记
/api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记
/api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记
/api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记
/api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记
/api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
<code>URL HTTP Method Operation
/api/contacts GET 返回联系人数组
/api/contacts/:id GET 返回 ID 为 :id 的联系人
/api/contacts POST 添加一个新联系人并返回它(添加了 id 属性)
/api/contacts/:id PUT 更新 ID 为 :id 的联系人
/api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人
/api/contacts/:id DELETE 删除 ID 为 :id 的联系人
/api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹
/api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人
/api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记
/api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记
/api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记
/api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记
/api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记
/api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
<code class="language-json">{
"name": "yourname/my-contacts",
"description": "Simple RESTful API for contacts management",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@yourdomain.com"
}
],
"require": {
"slim/slim": "*",
"slim/extras": "*",
"slim/middleware": "*",
"monolog/monolog": "*",
"j4mie/paris": "*",
"flynsarmy/slim-monolog": "*"
},
"archive": {
"exclude": ["vendor", ".DS_Store", "*.log"]
},
"autoload": {
"psr-0": {
"API": "lib/"
}
}
}</code>
<code>bootstrap.php
composer.json
README.md
bin/
import
install
lib/
API/
public/
.htaccess
index.php
share/
config/
default.php
db/
logs/
sql/
data/
contacts.sql
users.sql
tables/
contacts.sql
notes.sql
users.sql
ssl/
mysitename.crt
mysitename.key</code>
<code class="language-apache"><directory>
# Required for mod_rewrite in .htaccess
AllowOverride FileInfo
Options All -Indexes
DirectoryIndex index.php index.shtml index.html
<ifmodule php5_module="">
# For Development only!
php_flag display_errors On
</ifmodule>
# Enable gzip compression
<ifmodule filter_module="">
AddOutputFilterByType DEFLATE application/json
</ifmodule>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</directory>
<virtualhost>
ServerAdmin you@yourdomain.com
DocumentRoot "/path/to/MyApp/public"
ServerName myapp.dev
<ifmodule rewrite_module="">
RewriteEngine on
## Throw a 403 (forbidden) status for non secure requests
RewriteCond %{HTTPS} off
RewriteRule ^.*$ - [L,R=403]
</ifmodule>
</virtualhost>
<ifmodule ssl_module="">
NameVirtualHost *:443
Listen 443
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
<virtualhost>
ServerAdmin you@yourdomain.com
DocumentRoot "/path/to/MyApp/public"
ServerName myapp.dev
SSLEngine on
SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt
SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key
SetEnv SLIM_MODE development
</virtualhost>
</ifmodule></code>
입니다
편안한 API를 설계하는 방법은 무엇입니까?
위 내용은 처음부터 REST API를 구축하십시오 : 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!