1. ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์ ์ ๊ณตํ๋ ์๋น์คํค๋ ์ผ๋จ ์ธ์ฝ๋ฉ๋ ํค๋ฅผ ์ ๊ณตํ๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด %์ ๊ฐ์ด ๋ณํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
// ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ธ์ฝ๋ฉ๋ ํค(์๋น์คํค ์ผ๋ถ ์ญ์ )
์ด๋ ๊ฒ ํฌ์คํธ๋งจ์ด๋ ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์ ํ ์คํธํด๋ณด๋ฉด ์ ๋๋ก ๋์ค์ง๋ง, ์ฝ๋์์ผ๋ก๋ ๋์ค์ง ์๋๋ค.
๋ค๋ฅธ API๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ ์ด๊ฑด ์ ๋๋ก ๋์์ ๋ ์ ์๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
-> ๊ทธ๋ผ ์ธ์ฝ๋ฉ์ ๋ป์ด ์ ํํ๊ฒ ๋ฌด์์ด๋? ๋์ฝ๋ฉ์?
Codable ํ๋กํ ์ฝ์ Encodable๊ณผ Decodable๋ก ๊ตฌ์ฑ๋์์ผ๋ฉฐ,class, struct, enum ์ ์ฑํ์ด ๊ฐ๋ฅํ๋ค.
2. ์ธ์ฝ๋ฉ์ด ๋์ด ์๋ ํค๋ผ %์ ๊ฐ์ ํน์ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ ์๋ค.
3. url์ ๋ง๋ค ๋, ๋ค์ ํ๋ฒ ์ธ์ฝ๋ฉ์ด ๋๊ธฐ ๋๋ฌธ์(?) ์ธ์ฝ๋ฉ์ด ๋๋ฒ ๋ผ์ ํค๊ฐ์ด ๋ฐ๋๋ค?
4. ๊ทธ๋ ๋ค๋ฉด ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์๋ ์ ์ฌ๋ ํ๋ค๊ฒ ์ด๋ ๊ฒ ์๋น์คํค๋ฅผ ์ธ์ฝ๋ฉํด์ ์ฃผ๋ ๊ฒ์ธ๊ฐ? ์ด์ ๋ฅผ ๋งํด๋ผ,,,
5. ๊ณต๊ณต๋ฐ์ดํฐํฌํธ ๋ด์์ ๋์ฝ๋ฉ๋ ํค๋ ์ ๊ณตํ๊ณ ์๋ค. ๊ทผ๋ฐ ์๋๋ค.
1. ์ค์ ์๋น์คํค๋ฅผ ์ฌ์ฉํ๋ ํท๊ฐ๋ ค์ ์์๋ก ๋ด๊ฐ ํน์๋ฌธ์์ ๊ณต๋ฐฑ์ด ํฌํจ๋ ํค๊ฐ์ ๋ง๋ค์ด๋ณด์๋ค.
addingPercentEncoding์ ์ฌ์ฉํ์ฌ ์ธ์ฝ๋ฉ ํ์ ๋ ์๋์ ๊ฐ์ด ๋์จ๋ค.
2. endpoint๊ฐ ๋คํธ์ํฌ๋งค๋์ ๋ก ๋ค์ด์ค๊ณ , urlComponents.queryItems๋ฅผ ์ฐ์ด๋ณด์๋ค.
์ธ์ฝ๋ฉ๋ ๊ฐ์ด ์ ๋๋ก ๋ค์ด์จ ๊ฒ์ ํ์ธ.
๊ทธ๋ฆฌ๊ณ url ๋ถ๋ถ์ ์ฐ์ด๋ณด์์ ๋ ์ถ๊ฐ์ ์ผ๋ก ์ธ์ฝ๋ฉ์ด ๋ ๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
์ฆ, ์ธ์ฝ๋ฉ์ด 2๋ฒ ๋ ๊ฒ.
3. ๊ทธ๋ ๋ค๋ฉด ์๋น์คํค์ ๋น์ทํ๊ฒ ์ํฉ์ ๋ค์ ๋ง๋ค์ด๋ณธ๋ค.
๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์ ์ ๊ณตํด์ค ์ธ์ฝ๋ฉ๋ ํค๋ฅผ ๊ฐ์ ํด๋ณธ๋ค.
์ง๊ธ ์ธ์ฝ๋ฉ์ด 2๋ฒ ๋ ๊ฒ์ด ๋ฌธ์ ์์ผ๋ฏ๋ก ์ธ์ฝ๋ฉ ๋ ์๋น์คํค๋ฅผ ๋์ฝ๋ฉํ๋ ๊ฒ๋ถํฐ ์์ํ๋ค.
๋์ฝ๋ฉ์ด ์ ๋๋ก ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
4. ๋คํธ์ํฌ๋งค๋์ ์์ url์ ํ์ธํด๋ณด๋ฉด ์ธ์ฝ๋ฉ๋ ํค๊ฐ url์ ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ธ์ฝ๋ฉ์ด ๋๋ฒ ๋๋ ์ํฉ์์ ์ฒ์ ๋์ฝ๋ฉ์ ํด์ฃผ๋ฉด url์ด ๋ง๋ค์ด์ง๋ ๊ณผ์ ์์ ์ธ์ฝ๋ฉ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ค์ด๊ฐ๋ ๊ฒ ๊ฐ๋ค.
๊ทผ๋ฐ, ์๋น์คํค๋ ์ ์๋ ๊น.
๋ค์ ๋์์์ ์๋น์คํค๋ก ๋ค์ ์๋ํด๋ณธ๋ค.
1. ์ธ์ฝ๋ฉ์ด ๋ ํค๋ฅผ ๋์ฝ๋ฉ ํ๋ค.
2. urlComponents.queryItems์ ํ์ธํด๋ณธ๋ค.
๋์ฝ๋ฉ ๋ ์๋น์คํค๊ฐ ๋ค์ด์จ๋ค
3. url์ ํ์ธํด๋ณด๋ ๋ญ๊ฐ ๋ฐ๋๊ธด ํ๋ค. ์ธ์ฝ๋ฉ์ด ๋ ๊ฑธ๊น...
๊ทผ๋ฐ ์๋ ์ +์ %์ ๊ฐ์ ํน์๋ฌธ์๋ค์ด ๋ ๋ค์ด๊ฐ ์๋๊ฑธ๊น...
percentEncodedQuery์ addingPercentEncoding(withAllowedCharacters:)์ ์ฐจ์ด์ ์ด ๋ญ๊น
๋ ๋ค ์ธ์ฝ๋ฉ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ํ๋ ๋ฉด์์ ์ ์ฌํ์ง๋ง ์ฐจ์ด์ ์ด ์๋ค.
1. percentEncodedQuery
- ; ๋ฌธ์๋ ํฉ๋ฒ์ ์ธ ๊ฒฝ๋ก ๋ฌธ์์ด์ง๋ง, URL ํธํ์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด ํผ์ผํธ ์ธ์ฝ๋ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. CharacterSet.urlQueryAllowed์ ํจ๊ป String.addingPercentEncoding(withAllowedCharacters:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ; ๋ฌธ์๋ฅผ ํผ์ผํธ ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค.
- getter
getter๋ percentEncodedQuery์ ๊ฐ์ ์ฝ์ด์ฌ ๋ ํธ์ถ๋๋ ๋ฉ์๋.
์ฆ, percentEncodedQuery ํ๋กํผํฐ์ ์ ์ฅ๋ ๊ฐ์ ์์ฒญํ๋ฉด, ์ด ๊ฐ์ด ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ์ํ๋ก ๋ฐํ๋จ.
์๋ฅผ ๋ค์ด, URL์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ฝ์ ๋, ์ด ๋ฌธ์์ด์ด ์ด๋ฏธ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ํํ๋ก ์ ์ฅ๋์ด ์๋ค๋ฉด ๊ทธ๋๋ก ๋ฐํ.
์ฌ์ฉ๋๋ ์ํฉ: ํด๋น ํ๋กํผํฐ์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ถ๋ ฅํ๊ฑฐ๋ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ ค๊ณ ํ ๋
// getter
// ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ํํ๋ก ์ ์ฅ
let query = urlComponents.percentEncodedQuery
print(query) // ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๋ฐํ
// ํผ์ผํธ ์ธ์ฝ๋ฉ์ด ๋์ง ์์ ํํ๋ก ์ ์ฅ: ์ธ์ฝ๋ฉ๋์ง ์์ ๋ฌธ์์ด ๊ทธ๋๋ก ๋ฐํ
urlComponents.percentEncodedQuery = "name=John Doe"
let query = urlComponents.percentEncodedQuery
print(query) // "name=John Doe" (ํผ์ผํธ ์ธ์ฝ๋ฉ์ด ์ ์ฉ๋์ง ์์)
- setter
setter๋ percentEncodedQuery ํ๋กํผํฐ์ ๊ฐ์ ์ค์ ํ ๋ ํธ์ถ๋๋ ๋ฉ์๋.
์ด ๊ฒฝ์ฐ, setter๋ ์ค์ ํ๋ ค๋ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์ด๋ฏธ ํผ์ผํธ ์ธ์ฝ๋ฉ๋์๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ฐ์ ์ ์ฅ.
์๋ชป๋ ์ธ์ฝ๋ฉ์ด ๋ ๋ฌธ์์ด์ ์ค์ ํ๋ ค๊ณ ํ๋ฉด, fatalError๊ฐ ๋ฐ์ํ ์ ์์.
์ฌ์ฉ๋๋ ์ํฉ: ํ๋กํผํฐ์ ๊ฐ์ ๋ณ๊ฒฝ(์๋ก์ด ๊ฐ ํ ๋น)ํ ๋
// setter
urlComponents.percentEncodedQuery = "name%20=John%20Doe" // ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ค์
**ํผ์ผํธ์ธ์ฝ๋ฉ์ URL์์ ํน์ ๋ฌธ์๋ฅผ ์์ ํ๊ฒ ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ค
URL์ ํฌํจ๋ ์ ์๋ ํน์๋ฌธ์(๊ณต๋ฐฑ, #, &)๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ %์ ASCII์ฝ๋ 16์ง์๋ก ์ธ์ฝ๋ฉํ๋ค.
2. addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
- ๋ฌธ์์ด์์ ํน์ ๋ฌธ์๋ฅผ ํผ์ผํธ ์ธ์ฝ๋ฉํ ๋ ์ฌ์ฉ
๋ฐํ ๊ฐ
ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ๋ฐํํ๋ฉฐ, ๋ณํ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ nil์ ๋ฐํํฉ๋๋ค.
์ค๋ช
์ ์ฒด URL ๋ฌธ์์ด์ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ์ ์์ต๋๋ค. URL์ ๊ฐ ๊ตฌ์ฑ ์์๋ง๋ค ํ์ฉ๋๋ ๋ฌธ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, URL์ ์ฟผ๋ฆฌ ๊ตฌ์ฑ ์์๋ @ ๋ฌธ์๋ฅผ ํ์ฉํ์ง๋ง, ์ด ๋ฌธ์๋ ๋น๋ฐ๋ฒํธ ๊ตฌ์ฑ ์์์์๋ ํผ์ผํธ ์ธ์ฝ๋ฉ๋์ด์ผ ํฉ๋๋ค.
UTF-8 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ ํผ์ผํธ ์ธ์ฝ๋ฉ ๋ฌธ์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. allowedCharacters์ ํฌํจ๋ 7๋นํธ ASCII ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ฌธ์๋ ๋ฌด์๋ฉ๋๋ค.
์ค์ํ ์
์ด๋ฏธ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ ๋ฉ๋๋ค. ์ด๋ฏธ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ๋ํด ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ํผ์ผํธ ์ธ์ฝ๋ฉ ์ํ์ค์ ํผ์ผํธ ๋ฌธ์๊ฐ ๋ ๋ฒ ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ๋ณด๊ณ ๋ค์ ๋ง๋ค์ด์ง url์ ๋ด๋ณด์,,,
%์ด์ธ์ +์ ๊ฐ์ ํน์๋ฌธ์๋ค์ด ๋ณด์ธ๋ค.
์ฒซ๋ฒ์งธ ์๋ ๋ฐฉ๋ฒ
getter์ setter ๊ฐ๋ ์ ์ ์ฉํด๋ณธ๋ค. -> ์๋จ
๋๋ฒ์งธ ์๋ ๋ฐฉ๋ฒ
๊ถ๊ธํด์ ์๋ ํด๋ดค์..ใ ใ
ํค๊ฐ์ ์ง์ ๋ฌธ์์ด๋ก ์ง์ ์ ๋ ฅํด๋ณธ๋ค๋ฉด...?? ๊ทธ๋๋ ์๋จ...
์ธ๋ฒ์งธ ์๋ ๋ฐฉ๋ฒ
๋ฌธ์์ด์ ์ธ์ฝ๋ฉ ํด๋ณด์ ... -> ์๋จ..ใ ใ
์ธ์ฝ๋ฉ์ด ๋ ํค๋ฅผ urlComponents์์ url์ ๋ง๋๋ ๊ณผ์ ์์ ํ๋ฒ ๋ ์ธ์ฝ๋ฉ์ด ๋๋ ๋ฌธ์
1. ์ฒ์๋ถํฐ ๋์ฝ๋ฉ ๋ ํค๋ฅผ ์ฌ์ฉํด์ url์ ๋ง๋ ๋ค
2. ์ธ์ฝ๋ฉ์ด ๋ ํค๋ฅผ ๋์ฝ๋ฉํ ํ url์ ๋ง๋ ๋ค