문자열을 입력받아 연속된 홀수 사이에 Dash("-")를 넣어라.
package CodeStatesAlgorithms;
public class IfOddAddDash {
public String insertDash(String str) {
if(str.length()==0) return null;
String result = str;
int count = 0;
for(int i = 0; i < str.length()-1; i++) {
if(isOdd(str.charAt(i)) && isOdd(str.charAt(i+1)) ){
result = result.substring(0,i+1+count)+"-"+result.substring(i+1+count);
count++;
}
}
return result;
}
public boolean isOdd(char s){
int num = s; // char이 int로 알아서 바뀐다.
if(num%2==0){
return false;
}
return true;
}
}
//입력
ifOddAddDash.insertDash("243579118239")
//출력
243-5-7-9-1-1823-9
모든 테스트케이스 통과.
int num = s
에서 char을 int형 변수에 할당하면 알아서 int로 바뀐다는 것을 알 수 있었다.
public String insertDash(String str) {
if(str.length() == 0) {
return null;
}
String result = "" + str.charAt(0); // 문자열로 변환하기 위해 "" 필요
for(int i = 1; i < str.length(); i++) {
int preNumber = Character.getNumericValue(str.charAt(i - 1)) % 2;
int curNumber = Character.getNumericValue(str.charAt(i)) % 2;
if(preNumber != 0 && curNumber != 0) {
result = result + "-";
}
result = result + str.charAt(i);
}
return result;
}
위와 같이 문자를 하나씩 잘라서 붙일 수도 있다.
start line
수행 작업(GET,PUT,POST 등)이나 방식(HEAD, OPTIONS)를 설명하는 HTTP methods를 나타냄
요청대상 또는 프로토콜, 포트, 도메인의 절대경로는 요청 컨텍스트에서 작성
Headers : 헤더이름(대소문자 구분X 문자열), :, 값을 입력. 값은 헤더에 따라 다름
Body
웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
리차드슨의 REST 성숙도 모델
(cf. 2단계까지만 적용해도 좋은 API 디자인이다.)
단순히 HTTP 프로토콜을 사용하는 단계
(해당 API를 REST API라고 할 수는 없다.)
Resource를 도입하는 단계.
모든 요청을 단일 서비스 Endpoint로 보내는 것이 아니라 개별 Resource와 통신
요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야 함.
REST API는 웹에서 사용되는 모든 데이터나 자원(Resource)을 HTTP URI로 표현한다. 따라서 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 하며, 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 한다.
CRUD에 맞게 적절한 HTTP 메서드를 사용하는 단계
(CRUD = Create(생성), Read(읽기), Update(갱신), Delete(삭제))
GET
- Read
POST
- Create
PUT
- Update
PATCH
- Update
Delete
- Delete
이 밖의 메소드가 궁금하면 링크에서 찾아보자.
2단계까지만 적용해도 잘 작성된 API다.
HATEOAS(Hypertext As The Engine Of Application State)라는 약어로 표현되는 하이퍼미디어 컨트롤을 적용하는 단계.
응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 중요 포인트
HTTP 요청을 테스트할 수 있는 API 테스트 도구
Body = JSON 형식으로 보낼 때에는, raw를 선택
(헤더에 Content-Type: application/json
이걸 입력하는 것과 같음)
원하는 지역 search를 통해 지역 id 를 아래와 같이 알아낸다.
(url 맨 뒤에 있는 7자리 숫자가 city id)
http://api.openweathermap.org/data/2.5/weather?id=1897000&appid={API_KEY}
위에서 구한 id와 api_key를 이용해 완성한 URL을 postman에 입력
{
"coord": {
"lon": 127.1378,
"lat": 37.4386
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"base": "stations",
"main": {
"temp": 269.76,
"feels_like": 266.03,
"temp_min": 268.52,
"temp_max": 269.76,
"pressure": 1021,
"humidity": 28
},
"visibility": 10000,
"wind": {
"speed": 2.57,
"deg": 20,
"gust": 6.17
},
"clouds": {
"all": 0
},
"dt": 1674796550,
"sys": {
"type": 1,
"id": 5509,
"country": "KR",
"sunrise": 1674772750,
"sunset": 1674809319
},
"timezone": 32400,
"id": 1897000,
"name": "Seongnam-si",
"cod": 200
}
추가로 코드스테이츠 서버에 messages를 GET,POST하며 Postman을 간략하게 사용해 봤다.
Q: /messages?roomname=room1은 필터링이 되는데
/messages?username=user1은 필터링이 안되던데
이유가 서버에 기능이 없어서일까요?
A: ㅇㅇ 서버에 기능을 안만들어놔서 그럼