GET				/orgs
POST			/orgs
GET				/orgs/{org-id}
PUT				/orgs/{org-id}	
DELETE	/orgs/{org-id}
POST			/orgs/{org-id}/members
GET				/orgs/{org-id}/members
GET				/orgs/{org-id}/members/{member-id}
PUT				/orgs/{org-id}/members/{member-id}
DELETE	/orgs/{org-id}/members/{member-id}
POST			/orgs/{org-id}/projects
GET				/orgs/{org-id}/projects
GET				/orgs/{org-id}/projects/{project-id}
PUT				/orgs/{org-id}/projects/{project-id}
DELETE	/orgs/{org-id}/projects/{project-id}
POST			/orgs/{org-id}/projects
Content-Type:	application/json
{
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}
HTTP/1.1	200	OK	
Content-Type:	application/json
{
"result":	{	"id":	"1"	}
}
POST			/orgs/{org-id}/projects
HTTP/1.1	200	OK	
Content-Type:	application/json
{
"result":	{	"id":	"1"	}
}
HTTP/1.1	201	Created	
Location:	/orgs/1/projects/1
HTTP/1.1	200	OK
Content-Type:
Content-Location:	/orgs/1/projects/1
{
"result":	{	
"id":	"1",
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}
}
GET				/orgs/{org-id}/projects
HTTP/1.1	200	OK	
Content-Type:	application/json
{
"result":	[{	
"id":	"1",
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}]
}
HTTP/1.1	201	Created	
Location:	/orgs/1/projects/1
HTTP/1.1	200	OK	
Content-Type:	application/vnd.d-proj+json
[{	
"id":	"1",
"code":	"프로젝트-코드",
"description":	"프로젝트 설명",
"links":	[{
"self":	"/org/1/projects/1"
}]
}]
POST				/orgs/{o-id}/projects/{p-id}/tasks
HTTP/1.1	201	Created	
Location:	/orgs/1/projects/1
{
"subject":	"제목",
"body":	"본문",
"users":	{
"from":	"{member-id0}",
"to":	[{member-id1},	{member-id2}],
"cc":	[]
}
}
GET					/orgs/{o-id}/projects/{p-id}/tasks/{number}
HTTP/1.1	201	Created	
Location:	/orgs/1/projects/1
{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{
"from":	"1",
"to":	["2",	"3"],
"cc":	[]
}
}
{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{
"from":	"1",
"to":	["2",	"3"],
"cc":	[]
}
}
{
"id":	"1",
"code":	"프로젝트-코드",
"description":	"프로젝트설명"
}
GET	/orgs/{o-id}/projects/{project-id}/tasks
GET	/orgs/{o-id}/projects/{project-id}/tasks
GET	/orgs/{org-id}/projects/{project-id}/tasks
GET	/orgs/{org-id}/projects/*/tasks
GET	/orgs/{org-id}/projects/*/tasks?to={member-id}
GET	/orgs/{org-id}/projects/*/tasks?cc={member-id}
GET	/orgs/{org-id}/projects/*/tasks?from={member-id}
GET	/orgs/{o-id}/projects/{p-id}/tasks
GET	/orgs/{o-id}/projects/*/tasks
GET	/orgs/{o-id}/projects/*/tasks?to={}
GET	/orgs/{o-id}/projects/*/tasks?cc={}
GET	/orgs/{o-id}/projects/*/tasks?from={}
GET	/orgs/{o-id}/tasks?projectId={}
GET	/orgs/{o-id}/tasks
GET	/orgs/{o-id}/tasks?to={}
GET	/orgs/{o-id}/tasks?cc={}
GET	/orgs/{o-id}/tasks?from={}
{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{
"from":	"1",
"to":	["2",	"3"],
"cc":	[]
}
}
{
"id":	"1",
"code":	"프로젝트-코드",
"description":	"프로젝트설명"
}
GET	/orgs/{o-id}/projects/*/tasks?to={member-id}
{
"result":	[{
"number":	1,		
"subject":	"제목",
"body":	"본문",
"users":	{
"from":	"1",
"to":	["2",	"3"],
"cc":	[]
}
}]
}
{
"result":	[{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{
"from":	"1",
"to":	["2",	"3"],
"cc":	[]
},
"project":	{
"id":	1,
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}
}]
}
GET	/../projects/{project-id}/tasks?to={member-id}
{
"result":	[{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{ /*	생략 */ },
"project":	{
"id":	"1",
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}
}]
}
{
"result":	[{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1"
}],
"references":	{
"projectMap":	{
"1":	{
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}
}
}
}
GET	/../projects/*/tasks?to={member-id}
{
"result":	[{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{ /*	생략 */ },
"links":	[{
"project":	"/../projects/{p-id}"
}]
}]
}
{
"result":	[{
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1"
}],
"references":	{
"projectMap":	{
"1":	{
"code":	"프로젝트-코드",
"description":	"프로젝트 설명"
}
}
}
}
POST			/orgs/{o-id}/projects/{p-id}/drafts
GET				/orgs/{o-id}/projects/{p-id}/drafts
GET				/orgs/{o-id}/projects/{p-id}/drafts/{draft-id}
PUT				/orgs/{o-id}/projects/{p-id}/drafts/{draft-id}
DELETE	/orgs/{o-id}/projects/{p-id}/drafts/{draft-id}
POST			/orgs/{org-id}/drafts
GET				/orgs/{org-id}/drafts
GET				/orgs/{org-id}/drafts/{draft-id}
PUT				/orgs/{org-id}/drafts/{draft-id}
DELETE	/orgs/{org-id}/drafts/{draft-id}
POST			/orgs/{org-id}/drafts
req:	{	"subject":	"",	"body":	"",	"projectId":	""		/*	 */	}
POST			/orgs/{org-id}/projects/{project-id}/tasks
req:	{	"draftId":	"1"	}
PUT				/orgs/{org-id}/drafts/{draft-id}
req:	{	"subject":	"",	"body":	"",	"projectId":	""		/*	 */	}
POST			/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
DELETE	/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
POST			/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
DELETE	/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
POST	/orgs/{org-id}/drafts
res:	{	"id":	"1"	}
POST	/orgs/{org-id}/files
res:	{	"id":	"1"	}
PUT		/orgs/{org-id}/drafts/{draft-id}
req:	{	"fileIds":	["1"]	}
POST	/orgs/{org-id}/projects/{project-id}/tasks
req:	{	"draftId":	"1"	}
POST			/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
DELETE	/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
POST			/orgs/{o-id}/files
GET				/orgs/{o-id}/files/{file-id}
DELETE	/orgs/{o-id}/files/{file-id}
POST			/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files
GET				/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
DELETE	/orgs/{o-id}/projects/{p-id}/tasks/{number}/files/{file-id}
Accept:	application/json	
Accept:	image/png
GET	/../projects/{p-id}/tasks
[{
"id":	"1"
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1"
}]
for	(task	t:	tasks)	{
GET	/../projects/{p-id}/tasks/{number}/files
}
[{
"id":	"1"
"number":	1,
"subject":	"제목"
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1"
"hasFiles":	true
}]
[{
"id":	"1"
"number":	1,
"subject":	"제목"
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1"
"fileIds":	["1"]
}]
[{
"id":	"1"
"number":	1,
"subject":	"제목"
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1"
"fileCount":	1
}]
POST			/orgs/{org-id}/projects/{p-id}/tags
GET				/orgs/{org-id}/projects/{p-id}/tags
GET				/orgs/{org-id}/projects/{p-id}/tags/{tag-id}
PUT				/orgs/{org-id}/projects/{p-id}/tags/{tag-id}
DELETE	/orgs/{org-id}/projects/{p-id}/tags/{tag-id}
POST			/orgs/{o-id}/projects/{p-id}/tasks/{number}/tags
PUT			/../projects/{p-id}/tasks/{number}
req:	{	"tagIds":	["1",	"2"], /*	 */ }
GET	/../tasks?tagIds=1
GET	/../tasks?tagIds=and,1,2
GET	/../tasks?tagIds=or,1,2
for	(task	t:	selectedTasks)	{
newTagIds	= union(t.tagIds,	addTagIds);
PUT	/../tasks/{number}			'{	"tagIds":	newTagIds	}'
}
POST	/../projects/{p-id}/tasks/addTags
req:	{	"tagIds":	["1"],	"taskNumbers":	["1"]	}
MOVE	/../projects/{p-id}/tasks/{number}
req:	{	"projectId":	""	}
PUT		/../projects/{p-id}/tasks/{number}
req:	{	"projectId":	""	}
POST	/../projects/{p-id}/tasks/{number}/move
req:	{	"projectId":	""	}
res:	{	"number":	""	}
/orgs/{o-id}/projects
/orgs/{o-id}/tasks
PUT		/orgs/{o-id}/tasks/{task-id}
req:	{	"projectId":	""	}
URL:	/orgs/{o-id}/projects/{old-project-id}/tasks/{old-number}
URL:	/orgs/{o-id}/projects/{new-project-id}/tasks/{new-number}
/orgs/{o-id}/projects/{project-id}/tasks/{task-id}
/orgs/{o-id}/tasks/{task-id}
GET	/mails/{mail-id}
PUT	/mails/{mail-id}
req:	{	"read":	true	}
GET	/mails/{mail-id}?preview=false
{
"id":	"1"
"number":	1,
"subject":	"제목",
"body":	"본문",
"users":	{ /*	생략 */ },
"projectId":	"1",
"fileIds":	["1"]
}
GET		/orgs/{org-id}/projects/{project-id}/tasks/{number}
POST /orgs/{org-id}/projects/{project-id}/tasks/{number}/files
GET	/orgs/{org-id}/projects/{project-id}/tasks/{task-id}
{
"id":	"1",
"subject":	"제목",
"body":	"본문",
"users":	{	"from":	"",	"to":	[],	"cc":	[]	},
"permission":	{
"delete":	true #	프로젝트 관리자와 업무 생성자만 삭제 가능
}
}
"users": { "from": "" }, 'GET	/../projects/{}/members'
GET	/orgs/{org-id}/projects/{project-id}/tasks/{task-id}
GET	/orgs/{org-id}/projects/{project-id}/tasks/{task-id}/permissions
{
"id":	"1",
"subject":	"제목",
"body":	"본문",
"users":	{	"from":	"",	"to":	[],	"cc":	[]	},
"favorited":	true
}
GET	/orgs/{org-id}/projects/{project-id}/tasks/{task-id}
"favorited":	true'
POST			/../projects/{p-id}/tasks												#	 ,
DELETE	/../projects/{p-id}/tasks/{number} # , ,
/orgs/{org-id}/members
PUT	/orgs/{org-id}/members/{member-id}
{
"userCode":	"사용자 아이디",
"name":	"이름",
"password":	"",	 # 변경권한: 사용자 본인만,	admin은 reset만 가능
"role":	"member", # 변경권한: admin	이상, 사용자 본인은 변경 권한 없음
"department":	"부서 이름" # 변경권한: admin	이상
}
/orgs/{org-id}/members
PUT	/orgs/{org-id}/members/{member-id}
POST	/orgs/{org-id}/members/{member-id}/set-role
/orgs/{org-id}/members/{member-id}
/orgs/{org-id}/members/{member-id}/details/personal-part
/orgs/{org-id}/members/{member-id}/details/organizational-part
POST	/orgs/{org-id}/members
POST	/orgs/{org-id}/members/{member-id}/email-addresses
POST	/orgs/{org-id}/members/create-with-email
, ?
POST	/orgs/{org-id}/members
{
"userCode":	" ",	
"name":	" ",
"role":	"member",
"sendWelcomMailToMember":	true									/* */
}
POST	/orgs/{org-id}/members
POST	/orgs/{org-id}/members/{member-id}/send-welcome-mail
, ?
, ?
POST	/orgs/{org-id}/members/create-and-send-welcome-mail
{
"member":	{		
"userCode":	" ",	
"name":	" ",
"role":	"member",		
},
"sendWelcomMailToMember":	true
}
https://developers.google.com/drive/api/v3/reference/files#resource
?name={}
?nameLike={}
?nameExact={}
[2019] HTTP API 설계 후회 고민
[2019] HTTP API 설계 후회 고민
[2019] HTTP API 설계 후회 고민

[2019] HTTP API 설계 후회 고민