Lewati ke isi

Pengembangan Skrip / Menulis dan Memanggil Fungsi

Dokumen ini merupakan dokumen paling dasar untuk pengembangan Skrip di DataFlux Func. Setelah membacanya, Anda dapat melakukan pengembangan dan penggunaan paling dasar di DataFlux Func.

1. Catatan Sebelum Membaca

Selama penggunaan DataFlux Func,

Jangan biarkan beberapa orang login dengan akun yang sama, dan jangan biarkan beberapa orang mengedit kode yang sama secara bersamaan.

untuk menghindari masalah kode yang saling menimpa atau hilang.

2. Menulis Fungsi Pertama dan Memanggilnya

Menulis kode di DataFlux Func tidak jauh berbeda dengan menulis kode Python biasa. Untuk fungsi yang perlu diekspor sebagai API, cukup tambahkan dekorator bawaan @DFF.API(...).

Nilai balik fungsi adalah nilai balik API; ketika nilai balik berupa dict atau list, sistem akan otomatis memperlakukannya sebagai JSON dan mengembalikannya.

Berikut adalah contoh fungsi yang umum:

Python
1
2
3
4
5
6
@DFF.API('Hello, world')
def hello_world(message=None):
    ret = {
        'message': message
    }
    return ret

Platform DataFlux Func menyediakan berbagai cara untuk memanggil fungsi yang didekorasi dengan DFF.API(...):

Fitur Eksekusi Karakteristik Skenario Penggunaan
API Fungsi Sinkron Menghasilkan HTTP API sinkron. Setelah dipanggil, langsung mengembalikan hasil pemrosesan Skenario dengan waktu pemrosesan singkat dan klien perlu segera mendapatkan hasil
API Fungsi Asinkron Menghasilkan HTTP API asinkron. Langsung merespons setelah dipanggil, tetapi tidak mengembalikan hasil pemrosesan Skenario dengan waktu pemrosesan lama, panggilan API hanya sebagai sinyal awal
Tugas Terjadwal Dijalankan secara otomatis berdasarkan sintaks Crontab Sinkronisasi / cache data secara berkala, Tugas Terjadwal, dll.

!!! tip \"Lihat selengkapnya: Pengembangan Skrip / Konsep Dasar\"

Di sini, dengan membuat API Fungsi untuk fungsi ini, Anda dapat memanggil fungsi ini melalui HTTP dari internet publik.

Misalkan ID API Fungsi yang dibuat untuk fungsi ini adalah func-api-xxxxx, maka cara paling sederhana untuk memanggil fungsi ini adalah sebagai berikut:

Text Only
1
GET /api/v1/al/func-api-xxxxx/s?message=Hello

Responsnya adalah sebagai berikut (sebagian konten dihilangkan):

Text Only
1
2
3
4
HTTP/1.1 200 OK
Content-Type: application/json

{"message":"Hello"}

3. Menulis Fungsi yang Mendukung Unggah File

DataFlux Func juga mendukung unggah file melalui API Fungsi.

Ketika perlu memproses file yang diunggah, Anda dapat menambahkan parameter files pada fungsi untuk menerima informasi file yang diunggah. Setelah file diunggah, DataFlux Func akan otomatis menyimpan file ke direktori unggahan sementara untuk diproses lebih lanjut oleh Skrip.

Contoh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Menerima file Excel dan mengembalikan konten Sheet1
from openpyxl import load_workbook

@DFF.API('Baca Excel')
def read_excel(files=None):
    excel_data = []
    if files:
        workbook = load_workbook(filename=files[0]['filePath'])
        for row in workbook['Sheet1'].iter_rows(min_row=1, values_only=True):
            excel_data.append(row)

    return excel_data

Parameter files diisi secara otomatis oleh sistem DataFlux Func, dengan konten sebagai berikut:

JSON
1
2
3
4
5
6
7
8
9
[
    {
        "filePath"    : "<lokasi sementara penyimpanan file>",
        "originalname": "<nama file asli>",
        "encoding"    : "<enkoding>",
        "mimetype"    : "<tipe MIME>",
        "size"        : "<ukuran file>"
    }
]

Contoh perintah untuk mengunggah file dapat dilihat di Pengembangan Skrip / Konsep Dasar / API Fungsi / Penerusan Parameter Sederhana POST

4. Menerima Data Non-JSON dan Form

Ditambahkan pada versi 1.6.9

Dalam beberapa kasus, permintaan dapat dibuat oleh sistem atau aplikasi pihak ketiga dalam format khususnya sendiri, dan body permintaan bukan dalam format JSON atau Form, sehingga Anda dapat menggunakan **data sebagai parameter masukan dan memanggilnya dalam bentuk POST yang disederhanakan.

Ketika sistem menerima teks atau data yang tidak dapat diurai, sistem akan otomatis mengemasnya menjadi { "text": "<teks>" } atau { "base64": "<data biner format Base64>"} dan meneruskannya ke fungsi.

Contoh kodenya adalah sebagai berikut:

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import json
import binascii

@DFF.API('Fungsi yang menerima body dalam format apa pun')
def tiger_balm(**data):
    if 'text' in data:
        # Saat body permintaan berupa teks (mis., Content-Type: text/plain)
        # parameter `data` selalu berisi satu field `text` yang menyimpan konten
        return f"Teks: {data['text']}"

    elif 'base64' in data:
        # Saat body permintaan berformat yang tidak dapat diurai (Content-Type: application/xxx)
        # parameter `data` selalu berisi satu field `base64` yang menyimpan string Base64 dari body permintaan
        # string Base64 dapat dikonversi menjadi data biner Python menggunakan `binascii.a2b_base64(...)`
        b = binascii.a2b_base64(data['base64'])
        return f"Base64: {data['base64']} -> {b}"

Saat body permintaan berupa teks

Permintaannya adalah sebagai berikut:

Bash
1
curl -X POST -H "Content-Type: text/plain" -d 'hello, world!' http://localhost:8089/api/v1/al/auln-unknown-body/s

Outputnya adalah sebagai berikut:

Text Only
1
Teks: hello, world!

Saat body permintaan berformat tidak diketahui

Permintaannya adalah sebagai berikut:

Bash
1
curl -X POST -H "Content-Type: unknown/type" -d 'hello, world!' http://localhost:8089/api/v1/al/auln-unknown-body/s

Outputnya adalah sebagai berikut:

Text Only
1
Base64: aGVsbG8sIHdvcmxkIQ== -> b'hello, world!'