0 ₫

Chưa có sản phẩm trong giỏ hàng.

0 ₫

Chưa có sản phẩm trong giỏ hàng.

Một số tip với YAML mà lập trình viên nên biết

YAML là định dạng tệp thường được sử dụng để serialization dữ liệu. Có rất nhiều dự án sử dụng tệp YAML để cấu hình, chẳng hạn như Docker-compose, pre-commitTravisCIAWS CloudformationESLintKubernetesAnsible,và nhiều hơn nữa. Biết các tính năng của YAML sẽ giúp bạn tiếp cận với tất cả project dễ hơn.

Trước tiên, chúng ta hãy đề cập đến những điều cơ bản:

YAML là một tập hợp lớn của JSON (source). Mọi tệp JSON hợp lệ cũng là một tệp YAML hợp lệ. Điều này có nghĩa là bạn có tất cả các kiểu mà bạn mong đợi: Integers, floats, strings, bool, null. Ngoài ra còn sequences, maps. Tùy thuộc vào ngôn ngữ lập trình của bạn, bạn có thể nói “array” hoặc “list” thay vì sequences và “dictionary” thay vì map.

Nó thường trông như thế này:

mysql:
  host: localhost
  user: root
  password: something
preprocessing_queue:  # Line comments are available!
  - name: preprocessing.scale_and_center
    width: 32
    height: 32
  - preprocessing.dot_reduction
use_anonymous: true

Các ký hiệu tương đương nhau

YAML có rất nhiều cách tương đương để viết nội dung:

list_by_dash:
  - foo
  - bar
list_by_square_bracets: [foo, bar]
map_by_indentation:
  foo: bar
  bar: baz
map_by_curly_braces: {foo: bar, bar: baz}
string_no_quotes: Monty Python
string_double_quotes: "Monty Python"
string_single_quotes: 'Monty Python'
bool_english: yes
bool_english_no: no
bool_python: True
bool_json: true

Một số từ cần chú ý:

language: no  # ISO 639-1 code for the Norwegian language

Như ví dụ trên thì từ no sẽ được hiểu là false. Bạn cần phải viết là “no” hoặc ‘no’.

Nói chung, tôi khuyên bạn nên sử dụng true và false giống như JSON làm cho boolean, nhưng YAML hỗ trợ 11 cách để viết boolean. Nếu bạn muốn sử dụng dấu ngoặc kép cho chuỗi, tôi thì sử dụng ” giống như JSON. Bạn vẫn cần nhớ “no”, nhưng ít nhất tệp trông quen thuộc hơn với người mới bắt đầu YAML.

Đối với chuỗi dài có nhiều từ

disclaimer: >
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    In nec urna pellentesque, imperdiet urna vitae, hendrerit
    odio. Donec porta aliquet laoreet. Sed viverra tempus fringilla.

Điều này tương đương với JSON(các dòng mới được thêm vào để dễ đọc):

{"disclaimer": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
In nec urna pellentesque, imperdiet urna vitae, hendrerit odio.
Donec porta aliquet laoreet. Sed viverra tempus fringilla."}

Đối với chuỗi có nhiều dòng

mail_signature: |
      Martin Thoma
      Tel. +49 123 4567

Điều này tương đương với JSON:

{"mail_signature": "Martin Thoma\nTel. +49 123 4567"}

Lưu ý cách bỏ qua khoảng trắng ở đầu. Dòng đầu tiên (“Martin Thoma”) xác định số khoảng trắng hàng đầu bị bỏ qua.

Anchor

email: &amp;emailAddress "info@example.de"<br>id: *emailAddress

Điều này tương đương với JSON:

{"email": "info@example.de", "id": "info@example.de"}

& xác định biến emailAddress với giá trị “info@example.de“. Sau đó dấu * chỉ ra rằng nó sẽ lấy theo giá trị của biến đó.

Bạn có thể làm tương tự với mappings:

foo: &amp;default_settings
  db:
    host: localhost
    name: main_db
    port: 1337
  email:
    admin: admin@example.com
prod: *default_settings
dev: *default_settings

ta sẽ nhận được:

{ "dev": { "db": {"host":
                 "localhost",
                 "name": "main_db",
                 "port": 1337},
          "email": {"admin": "admin@example.com"}},
 "foo": { "db": {"host": "localhost",
                 "name": "main_db",
                 "port": 1337},
          "email": {"admin": "admin@example.com"}},
 "prod": { "db": {"host": "localhost",
                  "name": "main_db",
                  "port": 1337},
           "email": {"admin": "admin@example.com"}}}

Bây giờ bạn có thể muốn chèn mật khẩu vào cài đặt dev và prod. Bạn có thể làm điều đó bằng cách sử dụng <<:

foo: &amp;default_settings
  db:
    host: localhost
    name: main_db
    port: 1337
  email:
    admin: admin@example.com
prod:
  &lt;&lt;: *default_settings
  app:
    port: 80
dev: *default_settings

Điều này tương đương với JSON:

{ "foo": { "db": {"host": "localhost",
                  "name": "main_db",
                  "port": 1337},
           "email": {"admin": "admin@example.com"}},
  "prod": { "app": {"port": 80},
            "db": {"host": "localhost",
                   "name": "main_db",
                   "port": 1337},
            "email": {"admin": "admin@example.com"}},
  "dev": { "db": {"host": "localhost",
                  "name": "main_db",
                  "port": 1337},
           "email": {"admin": "admin@example.com"}},}

Type Casting

2 ký tự !! có ý nghĩa đặc biệt trong YAML. Nó được gọi là “secondary tag handle” và viết tắt cho !tag:yaml.org,2002 (source).

Bạn có thể thực hiện các chuyển đổi đơn giản như sau:

price: !!float 42
id: !!str 42

Hoặc một cái phức tạp hơn, ví dụ: ánh xạ trực tiếp đến các loại dữ liệu của Python mặc định không được chỉ định trong YAML:

tuple_example: !!python/tuple
  - 1337
  - 42
set_example: !!set {1337, 42}
date_example: !!timestamp 2020-12-31

Bạn có thể đọc nó với:

import yaml
import pprint
with open("example.yaml") as fp:
    data = fp.read()
pp = pprint.PrettyPrinter(indent=4)
pased = yaml.unsafe_load(data)
pp.pprint(pased)

Và bạn nhận được:

{   'date_example': datetime.date(2020, 12, 31),
    'set_example': {1337, 42},
    'tuple_example': (1337, 42)}

Ví dụ này sử dụng thẻ dành riêng cho Python !!python/tuple và một số thẻ YAML tiêu chuẩn. PyYaml có ví dụ sau:

## Standard YAML tags
YAML               Python 3
!!null             None
!!bool             bool
!!int              int
!!float            float
!!binary           bytes
!!timestamp        datetime.datetime
!!omap, !!pairs    list of pairs
!!set              set
!!str              str
!!seq              list
!!map              dict
## Python-specific tags
YAML               Python 3
!!python/none      None
!!python/bool      bool
!!python/bytes     bytes
!!python/str       str
!!python/unicode   str
!!python/int       int
!!python/long      int
!!python/float     float
!!python/complex   complex
!!python/list      list
!!python/tuple     tuple
!!python/dict      dict
## Complex Python tags
!!python/name:module.name         module.name
!!python/module:package.module    package.module
!!python/object:module.cls        module.cls instance
!!python/object/new:module.cls    module.cls instance
!!python/object/apply:module.f    value of f(...)

Xin lưu ý rằng việc tải các thẻ không chuẩn là không an toàn. Có thể thực thi mã tùy ý với !!python/object/apply:module.f. Trong PyYaml, bạn cần yaml.unsafe_load để sử dụng nó. Do đó bạn không nên sử dụng nó.

Multiple Documents trong một YAML

Ta có thể sử dụng cú pháp sau:

foo: bar
---
fizz: buzz

Trong Python, bạn có thể tải nó như với PyYAML:

import yaml
with open("example.yaml") as fp:
    data = fp.read()
parsed = yaml.safe_load_all(data)  # parsed is a generator

Nếu bạn chuyển chúng sang dạng list và in nó, bạn sẽ nhận được:

[{'foo': 'bar'}, {'fizz': 'buzz'}]

Xin lưu ý rằng đây không phải là một ký hiệu thay thế để viết danh sách. Đó là các tài liệu khác nhau.

Unlock Your Website’s Full Potential: Why Choosing the Right Web Hosting Service is a Game Change

Unlock Your Website's Full Potential: Why Choosing the Right...

FYNY – NỢ XẤU OK, THỦ TỤC ĐƠN GIẢN

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

Cách Xây Dựng Kịch Bản Livestream Hiệu Quả Để Thu Hút Khách Hàng

Trong thời đại công nghệ, với sự phát triển...

HOME CREDIT – DUYỆT HỒ SƠ 3 PHÚT – 10 PHÚT NHẬN TIỀN

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

TNEX -THỦ TỤC ĐƠN GIẢN – CHỈ CẦN CCCD

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

FECREDIT – TỶ LỆ DUYỆT CAO – THỦ TỤC ĐƠN GIẢN – KHÔNG THẾ CHẤP

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

Gen Z: Thế Hệ Tiêu Dùng Chìa Khóa Cho Tương Lai

Gen Z, với sức mua ấn tượng, đang nổi...

Affiliate Marketing với TikTok Shop: Cơ Hội Kiếm Tiền Tiềm Năng cho Người Mới

Affiliate Marketing đang mở ra rất nhiều cơ hội...

9 Thẻ Đen Quyền Lực

Đọc thêm: Tổng hợp các tổ chức tài chính...

Ý Tưởng Kinh Doanh Độc Đáo và Tiềm Năng Đầu Tư

Nếu bạn đang tìm kiếm những ý tưởng kinh...

Mở Tài Khoản Ngân Hàng Online Miễn Phí: Nhanh Chóng, Tiện Lợi, Quản Lý Tài Chính Dễ Dàng!

Trong thời đại công nghệ số phát triển vượt...

Khám Phá Bí Mật Đằng Sau Sự Thoải Mái Tuyệt Đối Của Quần Lót Boxerman

Tới cửa hàng BOXERMAN luôn: Nhấp vào đây Trong thị...

Xe Máy Điện VinFast: Lựa Chọn Hoàn Hảo Cho Giao Thông Xanh và Tiết Kiệm

Vay tiền mua xe nhấn vào đây VinFast và Sự...

Unlock Your Website’s Full Potential: Why Choosing the Right Web Hosting Service is a Game Change

Unlock Your Website's Full Potential: Why Choosing the Right...

FYNY – NỢ XẤU OK, THỦ TỤC ĐƠN GIẢN

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

Cách Xây Dựng Kịch Bản Livestream Hiệu Quả Để Thu Hút Khách Hàng

Trong thời đại công nghệ, với sự phát triển...

HOME CREDIT – DUYỆT HỒ SƠ 3 PHÚT – 10 PHÚT NHẬN TIỀN

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

TNEX -THỦ TỤC ĐƠN GIẢN – CHỈ CẦN CCCD

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

FECREDIT – TỶ LỆ DUYỆT CAO – THỦ TỤC ĐƠN GIẢN – KHÔNG THẾ CHẤP

NẾU BẠN CẦN TIỀN HÃY CỨ ĐĂNG KÝ VÀI...

Gen Z: Thế Hệ Tiêu Dùng Chìa Khóa Cho Tương Lai

Gen Z, với sức mua ấn tượng, đang nổi...

Affiliate Marketing với TikTok Shop: Cơ Hội Kiếm Tiền Tiềm Năng cho Người Mới

Affiliate Marketing đang mở ra rất nhiều cơ hội...

9 Thẻ Đen Quyền Lực

Đọc thêm: Tổng hợp các tổ chức tài chính...

Ý Tưởng Kinh Doanh Độc Đáo và Tiềm Năng Đầu Tư

Nếu bạn đang tìm kiếm những ý tưởng kinh...