# 7. 외부 기능 가져오기

오마이앱은 외부 기능 및 데이터와 API 연동이 가능해요. API 사용으로 서비스를 빠르게 확장시켜 보세요.

* API란?&#x20;

Application Programming Interface의 줄임말로, 프로그램들이 서로 상호 작용하는 것을 도와주는 매개체예요. 따라서, API를 사용해 외부에 있는 프로그램과 상호 작용하여 원하는 기능을 구현할 수 있고, 외부의 데이터 정보를 가져와 사용할 수 있어요.

<div align="left"><figure><img src="https://3976660509-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDgfvhQgmY9NbRK0Sln7j%2Fuploads%2FnbLrly3eFIt8DoEVGy3y%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202023-11-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.38.54.png?alt=media&#x26;token=485053b0-8446-4880-a3ec-1905ba565233" alt="" width="563"><figcaption></figcaption></figure></div>

API 사용으로 가장 많이 구현하는 기능들은, 이미 오마이앱 패키지로 준비되어 있어요. ex. 단건 결제, 지도 위치 목록, 그룹 영상 채팅 등의 패키지가 있어요. 각 패키지 설명을 참고해 API 키를 발급받고, 기능을 구현해 보세요.&#x20;

API 사용으로 가지고 올 수 있는 외부 데이터는 다양해요. 원하는 외부 데이터 정보의 API 키를 발급받아, 오마이앱 [로직 설정](https://docs.ohmyapp.io/main/guide/develop_app/command-execute-function/create-logic)을 통해 가져올 수 있어요.&#x20;

* 데이터 정보 API 연동 법

1. 관리자 웹 ➡︎ 로직 설정 ➡︎ '+' 버튼을 클릭하여 새로운 로직을 생성해 주세요.
2. If When ➡︎ Data is created 를 입력, Then ➡︎ API to DB를 입력해 주세요.

```
데이터가 처리 되는 곳을 등록 하면 API to DB 한다.
```

3. 아래의 빈 칸 작성 시, API 별로 정보를 제공하는 형식이 다르기 때문에 사용할 API에 맞게 입력해 주세요.

<div align="left"><figure><img src="https://3976660509-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDgfvhQgmY9NbRK0Sln7j%2Fuploads%2FQOkE7SHDLDRN4xB5QHwy%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202024-03-19%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.53.05.png?alt=media&#x26;token=d2c108e1-3ea4-4860-a1c7-54c9ee78cfb8" alt="" width="375"><figcaption></figcaption></figure></div>

1. **요청 URL :**  API 키 발급 시, 제공해 주는 정보예요. end point 라고도 불러요.&#x20;

* 요청 URL 작성 법 : <mark style="color:red;">**요청 URL**</mark> + 상세 기능 정보가 있는 <mark style="color:blue;">**api 목록 주소**</mark> + <mark style="color:green;">**?**</mark> + <mark style="color:orange;">**serviceKey=**</mark> + **서비스 키** (일반인증 키) 입력해 주세요.&#x20;
* 예시) <mark style="color:red;"><https://apis.data.go.kr/1471000/DURIrdntInfoService03></mark><mark style="color:blue;">/getUsjntTabooInfoList02</mark><mark style="color:green;">?</mark><mark style="color:orange;">serviceKey=</mark>uhnjRSZAz2C5rUeWT00SyB9CqE%2Brd34skT7KbUGUeepeFiG71CcMZYu6IGnmjcV19xBGzcVEkT48LyINTuKRQA%3D%3D

2. **요청 파라미터 :** 데이터 정보 중, 내가 필요한 정보만 가져올 수 있는 필터예요.&#x20;

* 필수 값이 아니므로, 비워둬도 작동해요.&#x20;
* 요청 파라미터 작성 법 : 필요한 정보를 입력해요. 주로 모든 정보를 불러오기 때문에 type을 입력해 주면 돼요.
* 예시) “type”:“json” 또는 “type”:“xml”

<div align="left"><figure><img src="https://3976660509-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDgfvhQgmY9NbRK0Sln7j%2Fuploads%2FS1JjW0uYSfRd9tkBPya7%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202023-10-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.21.50.png?alt=media&#x26;token=3e7a5424-4948-4596-8473-28c17097b951" alt="" width="522"><figcaption></figcaption></figure></div>

\*일부 정보만 필요하다면, API 키를 발급받은 사이트에서 필요한 정보를 가져와 작성해 주세요.&#x20;

3. **요청 헤더 :** API 요청 시 필요한 숨은 정보를 담아서 같이 가져와주는 역할이에요. 예를 들어, 인증 정보(token)등이에요.&#x20;

* 공공 API 사용시에는 작성하지 않아도 되는 경우가 대부분이에요.
* 필수 값이 아니므로, 비워둬도 작동해요.&#x20;

4. **HTTP 메서드 타입 :** API를 호출하는 방법이에요. 'GET'과 'POST'가 있는데, 대부분 'GET'을 사용해요. 이는 API 발급 시, 상세 기능정보에서 제공돼요.
5. **타임 아웃 :** API 응답 대기 시간을 제한하는 역할이에요. 응답 대기 시간이 너무 길 경우, 앱 작동에 문제를 일으킬 수 있어요.  시간은 초 단위로 설정해요.

* 필수 값이 아니므로, 비워도도 작동해요.&#x20;

6. **데이터를 저장할 위치 :** API 응답 데이터를 저장할 위치예요. 주로 로직 작성 시, 데이터가 처리되는 곳 “ \_을(를)”에 입력한 메타와 같은 메타로 입력하지만, 원하는 메타를 입력할 수도 있어요. &#x20;
7. **응답에서 가져올 데이터 위치 :** API 응답 데이터 안에서 가져올 배열 데이터의 위치예요. 저장할 데이터의 구조를 확인하고, 가져올 배열 데이터를 점 표기법을 통해 입력해 주세요.

* 데이터 구조 확인 및 점 표기법 예시

<div align="left"><figure><img src="https://3976660509-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDgfvhQgmY9NbRK0Sln7j%2Fuploads%2FkzCbA6S4fKIi7pknciXn%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202023-10-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.33.33.png?alt=media&#x26;token=5376e6cb-c714-40cc-897a-42a122131fce" alt="" width="563"><figcaption></figcaption></figure></div>

위의 이미지에서 데이터 배열 위치를 점 표기법으로 입력 : response.body.items.item

8. **데이터 검색** : 기존 데이터가 있을 시 업데이트 할 데이터를 찾는 검색 조건이에요. 세부 처리 조건에서 @query의 rawFind 와 같은 역할을 해요.

* 필수 값이 아니므로, 비워도도 작동해요.&#x20;

9. **저장할 데이터 정보 :** 어떤 항목 ID로, 어떤 데이터 항목을 저장할 것인지 설정하는 역할이에요.&#x20;

* 저장할 데이터 위치 작성법 : 내가 저장하고 싶은 항목의 “항목 ID”:“item. 가져올 데이터 항목 ID”
* 예시)“korMedi”:“item.INGR\_KOR\_NAME”

<div align="left"><figure><img src="https://3976660509-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDgfvhQgmY9NbRK0Sln7j%2Fuploads%2FZZ3mtCuYBGqjgW25sFOk%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202023-10-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.23.53.png?alt=media&#x26;token=703dfb87-d1bf-4b66-b388-58e3f63ab9fc" alt="" width="512"><figcaption></figcaption></figure></div>

[오픈 API 사용 예시 바로가기](https://docs.ohmyapp.io/main/guide/faq/logic/5)

2024.03.19 Jinny
