카테고리 없음

2024. 6. 12. (수) 슈퍼코딩 부트캠프 신입연수원 Day 9 (중간보고)

태영9922 2024. 6. 12. 18:43

 

  1. 중간 보고 양식(월~금요일)
  • TO-DO LIST : fastAPI로 서버를 만들고 python으로 CRUD 동작 실습
  • 배운 내용 요약 정리

- 백엔드에 정보를 보내는 방법

 1) Path parameter : 특정 리소스를 식별하고 싶을때 ex) /users/123 -> id가 123인 user를 찾는다

 2) Query parameter  : 정렬 또는 필터링을 하고 싶을때 ex) /users?age=20 -> 나이가 20살인 users

 3) Request Body : POST요청을 보내는 것으로 시작. 데이터 추가 동작. URL로 구분하는것이 아닌 body에 담긴 내용을 토대로 구분함.


uvicorn main:app --reload

- 서버 실행 명령어

 

@app.get('/items')
def read_item(skip:int=0,limit:int=10): 
    return items[skip:skip+limit]

- get 요청은 서버에 있는 값을 받아올때 실행

- read_item은 skip과 limit라는 parameter를 가지는 함수인데 콜론 뒤에는 파라미터의 기본값을 세팅, 

  여기서는 기본값은 int이고 아무값도 없으면 0을 넣는다는 의미.

- return 값은 python에서 배열을 slicing 하는 것으로, 배열[시작점:종료점:건너뛸 값] 의 의미이다.

 

@app.post("/items")
def post_item(item:Item):
    items.append(item.content)
    return '성공'

- post 요청은 서버에 값을 추가하는 요청을 할때.

- append는 배열에 값 추가하는 함수.

 

from fastapi.staticfiles import StaticFiles

app = FastAPI()

app.mount("/", StaticFiles(directory='static', html=True),name='static')

- static file을 사용하기 위한 api

 

 

for detatils...

https://fastapi.tiangolo.com/ko/

 

 

함수 = async() =>
{
    const res = await fetch('/wordle/answer'); //서버에 요청
    const answerobj = await res.json(); //요청받은 객체를 json 형태로 변환
    const answer = answerobj.answer // answerobj ={"answer" : APPLE}
}

- 비동기 요청(async) 

- fetch를 통해 서버에 요청을 보내고 -> 서버에서 보내준 객체를 json 형태로 answerobj에 저장한다음 -> 객체안에 있는 answer라는 key에 있는 value를 answer에 저장. 


  • CRUD 
  • Create
  • Read
  • Update
  • Delete

 

  • RestAPI란? Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. 
더보기
더보기

RestAPI (Representational State Tranfer API)의 특징

 

Stateless (무상태성) : 각 요청에는 필요한 모든 정보가 포함되어야 한다.

Cacheable(캐시 가능성) : 가능한 경우 클라이언트나 서버측에서 리소스를 캐시할 수 있어야 한다.

Client-Server(클라이언트-서버 구조) : 클라이언트와 서버는 완전히 독립적이어야 한다.

Layered System(계층화된 시스템 : 호출과 응답이 서로 다른 계층을 거친다. 서버와 클라이언트가 직접 연결되지 않는다. 

Uniform Interface(인터페이스 일관성) : 동일한 리소스에 대한 모든 API요청은 출처에 관계없이 동일하게 표시되어야 한다.

 

출처 : https://www.ibm.com/kr-ko/topics/rest-apis

 

 

더보기
더보기

RestAPI 설계 예시

 

1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.

Bad Examplehttp://khj93.com/Running/
Good Examplehttp://khj93.com/run/

 

2. 마지막에 슬래시 (/)를 포함하지 않는다.

Bad Example http://khj93.com/test/  
Good Example  http://khj93.com/test

 

3. 언더바 대신 하이폰을 사용한다.

Bad Example http://khj93.com/test_blog
Good Example  http://khj93.com/test-blog  

 

4. 파일확장자는 URI에 포함하지 않는다.

Bad Example http://khj93.com/photo.jpg  
Good Example  http://khj93.com/photo  

 

5. 행위를 포함하지 않는다.

Bad Example http://khj93.com/delete-post/1  
Good Example  http://khj93.com/post/1  

 

출처 : https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80

 


addEvnetListener 에서 event가 넘어가는데 동작을 수행 후 redirect를 안하려면 

event.preventDefault();

 

const res = await fetch('/memos')

- 기본 동작은 get method임.

//app.js


const res = await fetch("/memos", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      id: new Date(),
      content: value,
    }),
  });

- POST 동작 수행

 

@app.post("/memos")
def create_memo(memo:Memo):
    memos.append(memo)
    return '메모 추가에 성공'

app.mount('/', StaticFiles(directory='static', html=True), name='static')

- post 동작이 mount 보다 나중에 수행(코드가 밑에 있으면)되면 405 에러 발생