👷🏽♂️ Xây dựng Gato GraphQL công khai #1 (tháng 3 năm 2021)
Chào mừng đến với số đầu tiên của bản tin "Building in the Open"!
Đây là kênh chia sẻ tin tức về quá trình phát triển Gato GraphQL với cộng đồng, được gửi vào tuần đầu tiên của mỗi tháng.
Qua không gian này, chúng ta sẽ tìm hiểu tất cả những gì đã xảy ra trong tháng vừa qua, bao gồm:
✅ Chúng tôi đã làm việc trên điều gì, đã phát hành những tính năng mới nào
✅ Chúng tôi sẽ làm việc gì trong tháng tới
✅ Lượng truy cập chúng tôi nhận được trên website
✅ Plugin đã hoạt động như thế nào: Số lượt tải xuống, đăng ký newsletter, sao GitHub
✅ Tiến độ đạt được sự bền vững tài chính
✅ Các hướng dẫn mới được xuất bản
✅ Tóm tắt các bài viết blog mới được xuất bản
✅ Tiếp cận / Nhắc đến Plugin
✅ Tin tức chung
Nếu bạn thích bản tin này, hãy mời bạn bè đăng ký.
Bắt đầu thôi!
Lưu ý: Bản tin này là kênh giao tiếp hai chiều. Nếu có điều gì bạn muốn nói, hãy thoải mái thêm nhận xét (ở cuối bài viết).

Chúng tôi đã lập trình những gì
Nếu bạn để ý phần Hướng dẫn, mục "Extending Gato GraphQL" vẫn còn khá trống:

Ưu tiên của tôi là hoàn thành các hướng dẫn này. Nhưng trước khi làm điều đó, tôi muốn mã nguồn của plugin đơn giản nhất có thể. Càng đơn giản thì cần tài liệu hướng dẫn ít hơn, và mọi người đều có thể hiểu được nó hơn.
Với suy nghĩ đó, tôi đã quyết định tái cấu trúc mã nguồn, để nó hoàn toàn dựa trên Thành phần DependencyInjection của Symfony.
Ý tưởng là bất kỳ phần mở rộng nào cho plugin (chẳng hạn như TypeResolver, FieldResolver hay DirectiveResolver tùy chỉnh) chỉ cần được định nghĩa là một dịch vụ trong container, và dịch vụ đó sẽ được cấu hình tự động thông qua Compiler passes.
Hoàn toàn dựa vào dependency injection của Symfony có một số lợi thế:
✅ Có một cách duy nhất, nhất quán để tạo các phần mở rộng
✅ Chỉ cần tạo một lớp PHP triển khai một interface là hoàn thành toàn bộ công việc, và nhà phát triển không cần phải nắm rõ các chi tiết kỹ thuật phức tạp
✅ Tài liệu của Symfony rất toàn diện. Bằng cách hướng các nhà phát triển đến đó, đó là tài liệu mà tôi không cần phải viết
Quan tâm đến mã nguồn? Hãy xem các PR mới được merge của tôi (#453, #452, #449 và nhiều PR khác).
Tôi sẽ tiếp tục làm việc trên mã nguồn này trong những tuần tới, cho đến khi quá trình di chuyển hoàn thành 100%, và tôi có thể viết các hướng dẫn còn thiếu.
Lưu lượng truy cập vào gatographql.com
Hãy để tôi nói rõ một điều: Tôi quan tâm đến số lượng người truy cập website của plugin, như một chỉ số gián tiếp để biết có bao nhiêu người biết đến plugin.
Tôi không có túi tiền sâu để quảng bá plugin của mình. Và ngay cả khi có, tôi cũng không chi tiền để quảng cáo nó, vì điều đó đi ngược lại tinh thần của open source. (Điều này sẽ khác nếu open source chỉ là một kênh để bán sản phẩm hay dịch vụ nào đó, nhưng đó không phải trường hợp của tôi.)
Điều đó có nghĩa là tôi hoàn toàn dựa vào truyền miệng để quảng bá nó. Vì vậy, tôi đã dành rất nhiều công sức để viết các nội dung chất lượng cao cho blog của plugin, với hy vọng những nội dung này sẽ được chia sẻ rộng rãi, tiếp cận những người mà nếu không có đó họ sẽ không biết đến plugin.
Và cho đến nay, tôi khá hài lòng với kết quả.
Trong tháng vừa qua, tôi đã có 4,5k khách truy cập, với 6k lượt xem trang:

Hãy phân tích những con số thống kê này.
Phần lớn khách truy cập của tôi đến từ Hacker News, nơi tôi đã lên được trang đầu với một vài bài "Show HN", và Reddit, chủ yếu từ /r/PHP và /r/graphql (nơi tôi luôn chia sẻ các bài viết của mình).
Tôi đã xếp hạng #1 trên Google khi tìm kiếm "wordpress core graphql", và điều đó mang lại lượng truy cập đáng kể. Thật không may, đó chỉ là một sự kiện xảy ra một lần: sau 24 giờ nó biến mất đột ngột như lúc xuất hiện. Còn lại, vào một ngày thông thường tôi nhận được từ 3 đến 10 khách truy cập từ Google.
Twitter và Facebook mang lại một lượng truy cập đáng kể, nhưng tôi không biết từ ai (không phải từ tôi, vì tôi cực kỳ kém về mạng xã hội). Tôi có chia sẻ các bài viết của mình lên Twitter, nhưng chúng hiếm khi được retweet. Và tôi không dùng 👎🏾 Facebook.
(Nhân tiện, những ai chia sẻ bài viết của tôi trên mạng xã hội, cảm ơn bạn ❤️)
Tôi nhận được một lượng truy cập khiêm tốn nhưng ổn định từ danh sách các máy chủ GraphQL bằng PHP trên graphql.org, và từ một bài viết tôi đã đăng trên dev.to, xếp hạng #1 khi tìm kiếm "graphql execute multiple queries".
Cuối cùng, các bài viết của tôi thường xuyên xuất hiện trong các bản tin chính của WordPress (bao gồm WP Owls, wpMail.me, Post Status, WP Builds và The WP Weekly). Tôi không biết chính xác mỗi bản tin mang lại bao nhiêu lượng truy cập, vì nguồn giới thiệu sẽ hiển thị là Gmail và tương tự. Tuy nhiên, khi tổng hợp lại, các bản tin này tạo ra một lượng đáng kể khách truy cập.
Các bài viết blog của tôi là nội dung phổ biến nhất, với ba bài mới nhất (bài này, bài này và bài này) mỗi bài thu hút hơn 1k khách truy cập.
Những con số này trông khá tốt, đặc biệt kể từ khi tôi mới ra mắt website chưa đầy 2 tháng. Tuy nhiên, không phải mọi thứ đều tốt: Với 88%, tỷ lệ thoát khá cao. Tôi cần phải cải thiện điều đó.
Số liệu thống kê
Lưu lượng truy cập vào website chỉ là một chỉ số trang trí, để ước tính mức độ nhận biết về plugin. Nhưng quan trọng hơn nhiều là cần hỏi: Có bao nhiêu người bắt đầu sử dụng plugin trong tháng vừa qua?

Trong tháng vừa qua, plugin đạt được kết quả như sau:
🎯 Số lượt tải xuống plugin: 170
⭐️ Sao GitHub: 27
Số lượt tải xuống có thể được truy xuất từ GitHub API, truyền tham số per_page=3 để chỉ bao gồm 3 bản phát hành được tạo trong tháng vừa qua:
curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/GatoGraphQL/GatoGraphQL/releases?per_page=3 | grep "download_count"Tôi không vui mừng cũng không thất vọng với những con số này. Chúng không tuyệt vời (và tôi ước chúng tốt hơn), nhưng đó là một khởi đầu tốt.
Về lượt tải xuống, người ta nói rằng tìm được người dùng đầu tiên là nhiệm vụ khó khăn nhất. Chỉ sau khi một số người bắt đầu sử dụng plugin, và bắt đầu nói về nó, việc sử dụng nó mới trở nên phổ biến hơn. Tôi vẫn đang trong giai đoạn ban đầu tìm kiếm nhóm người dùng đầu tiên cam kết sử dụng.
Về sao GitHub, tôi phải nói rằng nó trông khá phẳng: khoảng 1 sao mỗi ngày trung bình. Đây chắc chắn không phải là điều gì đặc biệt. Nếu bạn thích những gì tôi đang xây dựng với Gato GraphQL, và bạn không ngại thể hiện một chút ❤️ yêu thương, hãy cân nhắc tặng ⭐️ sao trên GitHub.
Bền vững tài chính
Đây là vấn đề khó khăn: dự án phải bền vững về tài chính. Nó hoặc tạo ra một chút tiền, hoặc sẽ không tồn tại được lâu.

Nếu tôi có thể tạo ra thu nhập cho bản thân, thì tôi có thể tiếp tục làm việc trên nó, miễn là cần thiết. Đó là tất cả những gì tôi cần: một nguồn thu nhập. Không phải các nhà đầu tư gõ cửa tìm kiếm hàng triệu đô. Chỉ cần vài nghìn mỗi tháng, để trả tiền thuê nhà.
Mục tiêu của tôi là giữ plugin hoàn toàn open source. Vì vậy, hiện tôi đang liên hệ với một vài nhà tài trợ tiềm năng, hỏi xem họ có muốn giúp tài trợ cho việc phát triển plugin không. Đó sẽ là một tình huống đôi bên cùng có lợi.
Tại sao tôi lại tìm đến một số nhà tài trợ "lớn", thay vì dựa vào tài trợ thông thường từ bất kỳ ai trong cộng đồng?
Đúng, tôi cũng đang thử cách đó: Tôi có mặt trên GitHub Sponsors. Tuy nhiên, điều đó thực sự không hiệu quả, trừ khi bạn đã có hàng nghìn người dùng, người theo dõi hoặc người đăng ký danh sách email, mà bạn có thể tiếp cận, với kỳ vọng nhiều người trong số họ sẽ tài trợ cho bạn.
Ví dụ, yêu cầu mức tiêu chuẩn là 5 hoặc 10 USD mỗi tháng, tôi sẽ cần hàng trăm người tài trợ để cách tiếp cận này tài trợ cho công việc của tôi. Và tôi vẫn còn cách rất xa giai đoạn đó.
Nhưng hơn thế nữa, ai thực sự có thể thành công với cách tiếp cận này? Tôi biết rằng Caleb Porzio (người tạo ra Livewire) đã làm được, và hiện đã đạt hơn 1350 nhà tài trợ! Nhưng đó là ngoại lệ hơn là quy tắc.
Lấy Composer làm ví dụ. Composer đã thay đổi cơ bản cách chúng ta phát triển ứng dụng PHP, vậy mà họ chỉ có khoảng 90 nhà tài trợ. Làm sao tôi có thể kỳ vọng có được nhiều nhà tài trợ hơn Composer?
Đó là lý do tại sao cách tiếp cận hiện tại của tôi là tạo ra một tình huống đôi bên cùng có lợi cho dự án của tôi và một số ít công ty sẵn sàng tài trợ cho nó. Hãy hy vọng rằng nó sẽ thành công, và Gato GraphQL miễn phí cho tất cả mọi người, cho tất cả các tính năng, và tôi không cần phải khóa những thứ tốt đằng sau một paywall.
(Nếu bạn muốn biết cách đó là đôi bên cùng có lợi như thế nào, hãy gửi email cho tôi hoặc DM. Có lẽ công ty của bạn cũng quan tâm?)
Tôi sẽ dành vài tháng cho cách tiếp cận này, hy vọng tôi sẽ thực hiện được. Nếu không thành công, chỉ khi đó tôi mới cần xem xét việc xây dựng phiên bản PRO của plugin, và hạn chế một số tính năng cho phiên bản trả phí. (Ừ, điều đó thật tệ, nên tôi hy vọng có thể tránh giai đoạn đó.)
Trong các bản tin sắp tới, tôi sẽ cập nhật cho bạn biết liệu tôi có nhận được nhà tài trợ hay không.
Bài viết blog
Các bài viết blog là niềm tự hào và niềm vui tuyệt đối của tôi.
Lưu ý: Bạn có biết có một RSS feed trên website không? Bạn có thể đăng ký nhận tất cả các bài viết blog của tôi, đọc chúng trên trình đọc yêu thích của bạn.
Trong tháng vừa qua, tôi đã xuất bản được một bài viết blog chất lượng cao mỗi tuần:
🛠 WordPress có nên có GraphQL API trong core không? lập luận rằng WordPress có thể hưởng lợi từ GraphQL, vì WP REST API đã được cung cấp chức năng mới trong WordPress 5.6 (batch operations), mà một GraphQL API có thể cung cấp một cách tự nhiên.
🥊 Gato GraphQL vs WPGraphQL: cuộc đối đầu! so sánh plugin của tôi với WPGraphQL, trong một cuộc chiến đáng nhớ cho đến muôn đời, và sẽ tiếp tục khiến các fan boxing đòi hỏi thêm.
👶🏻 Trẻ hóa WordPress thông qua GraphQL minh chứng cách một WordPress headless có thể được tách rời khỏi codebase WordPress, tạo cơ hội để sửa chữa (hoặc ít nhất là bỏ qua) những món nợ kỹ thuật đã tích lũy.
🍾 Gato GraphQL giờ đã được scoped, nhờ PHP-Scoper! mô tả một chiến lược để scope một plugin WordPress bằng PHP-Scoper, nhằm tránh xung đột với các plugin khác.
Tiếp cận / Nhắc đến Plugin
Tôi rất vui khi plugin đã được giới thiệu ở một vài nơi.
✅ Tôi đã có bài nói chuyện "Intro to Gato GraphQL" tại WordCamp India 2021, trình diễn demo của plugin, và (thật bất ngờ khi làm demo trực tiếp) mọi thứ đều diễn ra hoàn hảo! Xem video trên YouTube.
✅ Joe Howard đã phỏng vấn tôi cho podcast WPMRR. Bản ghi âm sẽ sớm được phát hành.
✅ Chris Coyier đã giới thiệu plugin của tôi trong bản tin CSS-Tricks #239!

Đủ thứ chuyện
Một số tin tức chung, về những gì đã xảy ra trong tháng vừa qua.
Jason Bahl gia nhập WP Engine
Xin chúc mừng Jason khi gia nhập WP Engine! Tôi hy vọng anh ấy sẽ tiếp tục làm tốt như những gì anh ấy đã làm cho WPGraphQL.
Nhân tiện, việc chúng tôi là đối thủ cạnh tranh (thực ra là tôi đang cạnh tranh với anh ấy, anh ấy vẫn còn cách xa phía trước) không có nghĩa là chúng tôi không thể là bạn bè, hoặc hợp tác để cải thiện các dự án của nhau. Thực ra, cả hai chúng tôi đều chia sẻ cùng một mục tiêu: mang GraphQL đến WordPress (dù chúng tôi có ý tưởng khác nhau về cách thực hiện điều đó).
Nhưng tôi tin rằng sự cạnh tranh là tốt, và nó sẽ mang lại lợi ích cho tất cả mọi người.

WP Engine ra mắt Atlas, và tuyên bố biết tất cả về headless (có thật không?)
Tôi cũng xin chúc mừng WP Engine đã ra mắt Atlas, giải pháp WordPress headless mới của họ.
Thật không may, họ đã đưa ra một số thông tin không chính xác:
Các công ty sử dụng giải pháp hoàn toàn headless thường lưu trữ một ứng dụng JavaScript riêng cho front-end, kéo dữ liệu WordPress cụ thể thông qua các API — WordPress REST API hoặc plugin WPGraphQL.
Ừ, Gato GraphQL không tồn tại, đúng không?

Thông thường tôi sẽ không lo lắng về điều này, vì tôi không kỳ vọng mọi người đều biết về plugin của mình. Nhưng tôi tin rằng họ biết về dự án của tôi, và họ dường như đang cố tình phớt lờ nó.
Sau khi họ ra mắt developers.wpengine.com ("trung tâm một điểm dừng cho các thực hành tốt nhất, hướng dẫn, blog và tài liệu cho WordPress headless"), tôi đã liên hệ với họ:
- Matt Landers, Developer Relations tại WP Engine cho WordPress Headless, trên Twitter
- Nhóm phát triển của họ, trên repo GitHub của framework headless
- Ai đó từ Torque (tạp chí thuộc sở hữu của WP Engine), qua DM với @TheTorqueMag.
Tôi đoán họ chưa coi trọng dự án của tôi. Hoặc có thể họ chỉ không quan tâm đến nó, vì họ đã đầu tư hoàn toàn vào WPGraphQL.
Bây giờ, tôi ổn nếu họ không muốn đề cập đến plugin của tôi. Tuy nhiên, tuyên bố rằng WP REST API và WPGraphQL là hai lựa chọn duy nhất là rất sai lệch. Hậu quả là plugin của tôi bị tổn hại, và cộng đồng nhà phát triển bị nhầm lẫn.
Vì vậy, vâng, tôi phải thừa nhận rằng tôi cảm thấy khó chịu. Điều này thực sự không ổn. Tôi hy vọng họ sẽ đính chính thông tin không chính xác của mình (tôi đã gửi email cho họ rồi).
Kết lại
Đây là kết thúc của "Xây dựng Gato GraphQL công khai" số đầu tiên.
Bạn thấy thế nào? Hãy thoải mái chia sẻ suy nghĩ của bạn trong phần nhận xét.
Nếu bạn thích, tôi sẽ rất trân trọng nếu bạn có thể chia sẻ bản tin với bạn bè (hoặc, thậm chí tốt hơn, mời họ đăng ký).
Hẹn gặp lại tháng sau!