Skip to content

API Document

Junetrbl edited this page Dec 3, 2021 · 30 revisions

Document Revision History

  • 2021-10-30 v1.0 Initial version
  • 2021-11-03 v1.1 report authentication : remove unnecessary error handling
  • 2021-11-16 v1.2 change password : add 400 case for incorrect old password
  • 2021-11-23 v1.3 report authentication : add 404 case for No recent game logs
  • 2021-11-24 v1.4 update summoner name : add /api/update/summoner/ endpoint
  • 2021-11-25 v1.5 GET my received reports : add /api/my/received_reports/ endpoint & fixed my page response format
  • 2021-11-25 v1.6 add GET, POST, PUT reports/:report_id/apology/ & Fix mypage/, my/reports/, my/received_reports, /home/ response format
  • 2021-11-25 v1.7 update 400 cases POST, PUT reports/:report_id/apology/

API Table

Description API endpoint GET POST PUT DELETE
sign up /api/signup/ O
login /api/login/ O
logout /api/logout/ O
find id /api/forgot/id/ O
find password /api/forgot/password/ O
change password /api/change/password/ O
my page /api/mypage/ O
my reports /api/my/reports/ O
my received reports /api/my/received_reports/ O
report delete /api/reports/:id/ O
search /api/search/?summoners={} O
statistics /api/home/ O
report match authentication /api/reports/auth/ O O
report /api/reports/ O
update summoner name /api/update/summoner/ O
apology /api/apology/ O O O

API Details

1. signup: /api/signup/

  • POST
    • Request

      • body

        {
        	"username" : "username(string)",
        	"email" : "email(string)", 
        	"summoner_name" : "summoner name(string)",
        	"password" : "password(password)",
        
        }
    • Response 201

      • header

      • body

        {
             "message" : "User is created!"
        }
    • Error Case

      • already existing email: 400 Bad Request

        {
        	"error" : "This email already exists."
        }
      • already existing username: 400 Bad Request

        {
        	"error" : "This username already exists."
        }
      • non-existing summoner name: 400 Bad Request

        {
        	"error" : "This summoner name is invalid."
        }
      • already existing summoner name: 400 Bad Request

        {
        	"error" : "This summoner is already registered in our service."
        }

2. login : /api/login/

  • POST
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"username" : "username(string)",
        	"password" : "password(password)"
        }
    • Response 200

      • header

      • body

        {
        	
        }
    • Error Case

      • Not existing account : 400 Bad Request

        {
        	"error" : "Such account does not exist."
        }

3. logout : /api/logout/

  • POST
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	
        }
    • Response 200

      • header

      • body

        {
        	
        }
    • Error Case

      • Not logged in : 400 Bad Request

        {
        	"error" : "The user is not logged in."
        }

4. find id : /api/forgot/id/

  • POST
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"email" : "email address(string)"
        }
    • Response 200

      • header

      • body

        {
        	"message" : "Please check mail."
        }
    • Error Case

      • Not existing mail : 400 Bad Request

        {
        	"error" : "Such mail address is not registered in our service."
        }

5. find password : /api/forgot/password/

  • POST
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"email" : "email",
        	"username" : "username",
        }
    • Response 200

      • header

      • body

        {
        	"message" : "Please check your email."
        }
    • Error Case

      • Not existing email : 400 Bad Request

        {
        	"error" : "Such mail address is not registered in our service."
        }
      • Not existing username : 400 Bad Request

        {
        	"error" : "Such username is not registered in our service."
        }
      • Not correct username or email : 400 Bad Request

        {
        	"error" : "Email does not match username"
        }

6. change password : /api/change/password/

  • PUT
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"old_password" : "old_password",
        	"new_password" : "new_password",
        	"password_confirm" : "password_confirm",
        }
    • Response 200

      • header

      • body

        {
        	"message" : "You password is changed."
        }
    • Error Case

      • Password confirm is not correct: 400 Bad Request

        {
        	"error" : "Please enter password confirm correctly"
        }
      • Old password is not correct: 400 Bad Request

        {
        	"error" : "Please enter old password confirm correctly"
        }
      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing my page"
        }

7. my page : /api/mypage/

  • GET
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        }
    • Response 200

      • header

      • body

        {
        	"user" : {
        		"username" : "username(string)",
        		"email" : "email(string)",
        		"summoner_name" : "summoner name (string)",
        		"manner_point" : "manner point (integer)"
        	},
        
        	"reports" : {
        		"reports_for_user" : [
        			{
        				"id" : "report id (integer)",
        				"evaluation" : "evaluation score (integer)",
        				"tag" : "tags (string)",
        				"comment" : "comment (string)",
        				"apology" : "True or False (bool)",
        			},
        			{
        				"id" : "report id (integer)",
        				"evaluation" : "evaluation score (integer)",
        				"tag" : "tags (string)",
        				"comment" : "comment (string)",
        				"apology" : "True or False (bool)",
        			},
                	...
        		],
        		"reports_by_user": [
        			{
        				"id" : "report id (integer)",
        				"reported_summoner" : "reported summoner name (string)",
        				"evaluation" : "evaluation score (integer)",
        				"tag" : "tags (string)",
        				"comment" : "comment (string)",
        				"apology" : "True or False (bool)",
        			},
        			{
        				"id" : "report id (integer)",
        				"reported_summoner" : "reported summoner name (string)",
        				"evaluation" : "evaluation score (integer)",
        				"tag" : "tags (string)",
        				"comment" : "comment (string)",
        				"apology" : "True or False (bool)",
        			},
                	...
        		],
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing my page"
        }
      • Try to access other's mypage : 400 Bad request

        • /api/user/:id/mypage 같은 형식으로 접근한 경우
        {
        	"error" : "You can access only your mypage."
        }

8. my reports : /api/my/reports/

  • GET
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        }
    • Response 200

      • header

      • body

        {
        	"reports" : [
        		{
        			"id" : "report id",
        			"tag" : "tag",
        			"comment" : "comment",
        			"reported_summoner" : "reported summoner name",
        			"evaluation" : "evaluation",
        			"apology" : "True or False (bool)",
        		},
                {
        			"id" : "report id",
        			"tag" : "tag",
        			"comment" : "comment",
        			"reported_summoner" : "reported summoner name",
        			"evaluation" : "evaluation",
        			"apology" : "True or False (bool)",
        		}, ...
        	]
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing my page"
        }

9. report delete : /api/reports/:id/

  • DELETE
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        }
    • Response 200

      • header

      • body

        {
        	"message" : "Your report is deleted"
        }
    • Error Case

      • Not existing report : 400 Bad Request

        {
        	"error" : "Such report does not exist"
        }
      • Requesting user is not a writer : 401 Unauthorized

        {
        	"error" : "You can delete only your report"
        }

10. search post : /api/search/?summoners={}

  • parameter
    • type : multi/ single
    • players : (multi) string "player1_name, player2_name, player3_name, player4_name, player5_name" / (single) string "player_name"
  • GET
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • params

        {
        	"name" : "summoner name",
        }
    • Response 200

      • single

        • header

        • body

          {
          	"summoner_name" : "summoner name (string)",
          	"manner" : {
          		"manner_point" : "manner point (integer)",
          		"tag" : "manner point (integer)",
          		"comment" : "comment (string)"
          		"tag_pentagon" : "image",
          	},
          	"matches": [
          	{
          		"match_result" : "A or B (string)",
          		"matchers" : [
          			"matcher1" : {
          				"summoner_name" : "name",
          				"tier" : "tier",
          				"KDA" : "kda(string)",
          				"champion" : "champion",
                                      "lane" : "lane"
          
          			} , ... (team A members, team B members)
          		],
          		"kill_score" : ["team A score", "team B score"],
          		"items" : "items list",
          		"rune": "rune list",
          		"spell" : "spell list",
          	},
          	{
          		"match_result" : "A or B (string)",
          		"matchers" : [
          			"matcher1" : {
          				"summoner_name" : "name",
          				"tier" : "tier",
          				"KDA" : "kda(string)",
          				"champion" : "champion",
                                      "lane" : "lane"
          			} , ... (team A members, team B members)
          		],
          		"kill_score" : ["team A score", "team B score"],
          		"items" : "items list",
          		"rune": "rune list",
          		"spell" : "spell list",
          	},
          	...
          ]
      • multi

        • header

        • body

          {
          	"matchers" : [
          		{
          			"summoner_name" : "name",
          			"manner_point" : "manner point (integer)",
          			"tag_pentagon" : [tag1, tag2, tag3, tag4, tag5],
          			"tier" : {"tier" : "tier", "rank" : "rank"},
          			"recent_result": [
          				{
          					"kills" : "kills(string)",
          					"deaths" : "deaths(string)",
          					"assists" : "assists(string)",
          					"win" : "win or lose(boolean)",
          					"champion_id" : "champion_id",
          					"lane" : "lane"
          				},
          				{
          					"kills" : "kills(string)",
          					"deaths" : "deaths(string)",
          					"assists" : "assists(string)",
          					"win" : "win or lose(boolean)",
          					"champion_id" : "champion_id",
          					"lane" : "lane"
          				},...
          		}, 
          		{
          			"summoner_name" : "name",
          			"manner_point" : "manner point (integer)",
          			"tag_pentagon" : [tag1, tag2, tag3, tag4, tag5],
          			"tier" : {"tier" : "tier", "rank" : "rank"},
          			"recent_result": [
          				{
          					"kills" : "kills(string)",
          					"deaths" : "deaths(string)",
          					"assists" : "assists(string)",
          					"win" : "win or lose(boolean)",
          					"champion_id" : "champion_id",
          					"lane" : "lane"
          				},
          				{
          					"kills" : "kills(string)",
          					"deaths" : "deaths(string)",
          					"assists" : "assists(string)",
          					"win" : "win or lose(boolean)",
          					"champion_id" : "champion_id",
          					"lane" : "lane"
          				},...
          		}, ... (team A members, team B members)
          	]
          }
    • Error Case

      • Not existing user (for single search only) : 400 Bad Request

        {
        	"error" : "Such summoner does not exist."
        }

11. report authentication : /api/reports/auth/

  • GET

    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
    • Response 200

      • header

      • body

        {
        	"recent_players" : [
        		"player_name1",
        		"player_name1",
        		...
        	]
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "User is not logged in."
        }
      • No Recent game data : 404 Not Found

        {
        	"error" : "Data not found - match file not found"
        }
  • POST

    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"summoner_name" : "summoner name",
        }
    • Response 200

      • header

      • body

        {
        	"authenticated" : "True (Boolean)",
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "User is not logged in."
        }

12. report : /api/reports/

  • POST
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"name" : "summoner name",
        	"evaluation" : "evaluation (integer)",
        	"tag" : "tag list as string (string)",
        	"comment" : "comment (string)",
        }
    • Response 201 Created

      • header

      • body

        {
        		"id" : "report id",
        		"tag" : "tag(string ex. "tag1-1,tag1-2,tag2-1")",
        		"comment" : "comment(nullable)",
        		"reported_summoner" : "reported summoner name",
        		"evaluation" : "evaluation",
        }
    • Error Case

      • Not existing summoner : 400 Bad Request

        {
        	"error" : "Such summoner does not exist."
        }
      • No tag : 400 Bad Request

        {
        	"error" : "No tag selected."
        }
      • Not logged in : 401 Unauthorized

        {
        	"error" : "User is not logged in."
        }

13. statistics : /api/home/

  • GET
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        
        }
    • Response 200 OK

      • header

      • body

        {
        		"accumulated_reports" : 100,
                        "today_reports" : 5,
                        "not_answered_reports" : 2,
        }

14. update summoner name : /api/update/summoner/

  • GET
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"new_summoner_name" : "summoner_name" (string)
        }
    • Response 200 OK

      • header

      • body

        {
        		"message" : "Successfully update your summoner name."
        }
    • Error Case

      • Incorrect summoner name : 400 Bad Request

        {
        	"error" : "This name does not match your current summoner name."
        }
      • Not logged in : 401 Unauthorized

        {
        	"error" : "User is not logged in."
        }

15. my received reports : /api/my/received_reports/

  • GET
    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        }
    • Response 200

      • header

      • body

        {
        	"reports" : [
        		{
        			"id" : "report id",
        			"tag" : "tag",
        			"comment" : "comment",
        			"evaluation" : "evaluation",
        			"apology" : "True or False (bool)",
        		},
                {
        			"id" : "report id",
        			"tag" : "tag",
        			"comment" : "comment",
        			"evaluation" : "evaluation",
        			"apology" : "True or False (bool)",
        		}, ...
        	]
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing my page"
        }

15. Apology : /api/reports/:report_id/apology/

  • GET

    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        }
    • Response 200

      • header

      • body

        {
             "id": apology.id,
             "content": apology.content,
             "is_verified": apology.is_verified,
             "report_id": report.id
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing this apology."
        }
      • Unauthorized : 401 Unauthorized

        {
        	"error" : "You are not allowed to read this apology."
        }
      • No Apology Object : 404 Not Found

        {
        	"error" : "This report does not have any apology."
        }
      • No Report Object : 404 Not Found

        {
        	"error" : "This report does not exist."
        }
  • POST

    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"content" : "Sorry."
        }
    • Response 201

      • header

      • body

        {
             "id": apology.id,
             "content": apology.content,
             "is_verified": apology.is_verified,
             "report_id": report.id
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing this apology."
        }
      • Unauthorized : 401 Unauthorized

        {
        	"error" : "You are not allowed to write an apology to this report."
        }
      • Already wrote an apology : 400 Bad Request

        {
        	"error" : "You already wrote an apology for this report."
        }
      • No content : 400 Bad Request

        {
        	"error" : "내용을 입력해주세요."
        }
      • Insincere apology(ML) : 400 Bad Request

        {
        	"error" : "You need to reflect on yourself a little more so that you can submit it. Please rewrite it."
        }
      • No Report Object : 404 Not Found

        {
        	"error" : "This report does not exist."
        }
  • PUT

    • Request

      • header

        {
        	"X-CSRFToken" : "Token"
        }
      • body

        {
        	"content" : "Sorry."
        }
    • Response 200

      • header

      • body

        {
             "id": apology.id,
             "content": apology.content,
             "is_verified": apology.is_verified,
             "report_id": report.id
        }
    • Error Case

      • Not logged in : 401 Unauthorized

        {
        	"error" : "You need to login before accessing this apology."
        }
      • Unauthorized : 401 Unauthorized

        {
        	"error" : "You are not allowed to write an apology to this report."
        }
      • Haven't written an apology : 404 Bad Request

        {
        	"error" : "You haven't written an apology for this report."
        }
      • No content : 400 Bad Request

        {
        	"error" : "내용을 입력해주세요."
        }
      • Insincere apology(ML) : 400 Bad Request

        {
        	"error" : "You need to reflect on yourself a little more so that you can submit it. Please rewrite it."
        }
      • No Report Object : 404 Not Found

        {
        	"error" : "This report does not exist."
        }