Tuyển dụng full-time Senior PHP Developer


A Singapore-based company wants to hire a full time Senior PHP Developer can communicate in English as soon as before Feb 25, 2016. Pay is negotiable but we’ve budgeted for 1200-1500 USD per month, pay will commensurate with experience. Developer will also be entitled to yearly performance based bonus. Developer may also have opportunity to manage a small team.

Business Summary:

New web and mobile app development company in HCM helping start-ups realize their technology development goals. This an exciting opportunity for a highly motivated and talented individual to join a new and growing company.
Role: Senior PHP Developer. As a PHP developer, you will be responsible for developing high volume of complex websites/ applications.

The ideal candidate will be proficient in website/app design, development and verification.  They will have excellent communication, facilitation and negotiation skills and be able to interact with internal customers and identify essential requirements.  They will also be able to accurately estimate levels of effort.  The individual must have high quality standards, be adept at object-oriented and web methodologies and have strong problem solving skills with a demonstrated ability to take ownership and drive results
Job Description:

  • Assist in gathering requirements
  • Develop high quality code for high traffic and availability website and applications
  • When requested or a project requires some over-time may be necessary to meet company success
  • When needed meet clients and work with 3rd parties
  • Able to manage, lead, and develop teams

Key Requirements:

  • A Bachelor degree in computer science or related field
  • At least 5 years of strong experiences on PHP Framework
  • Strong knowledge/experiences on OOP, data structure and algorithm
  • Knowledge on high-availability, high-scalability web applications
  • Excellent knowledge on mySQL and Non mySQL databases.
  • JavaScript, Jquery, HTML, DHTML, CSS, others languages are a plus
  • Other Technologies: Linux, Apache/Nginx, Web Services, TCP/IP, SVN…
  • Good English communication
  • Detailed and focused on quality
  • Must be self-motivated and able to achieve results
  • Aptitude to learn quickly and work well within a team environment
  • Be able to manage, lead, and develop team

Other Requirements:

  • Must have 2 professional reference.
  • Must have sample portfolio to support experience.

Position type: 8 Full time months contract, extendable indefinitely with opportunity to become full time (negotiable)

Compensation: Negotiable. Highly competitive with performance incentive if milestones are met.

=================================================================

Please send your CV to duythanhcse@gmail.com if you want to apply this job! My profile: https://duythanhcse.wordpress.com/contact/

Bài 71: Xây dựng Web Service dùng API RESTful Service(phần 4)


Trong bài bài 68bài 69bài 70 các bạn đã hiểu được RESTful cũng như cách thức hoạt động của HttpPost, HttpGet, HttpPut và HttpDelete. Tuy nhiên để tương tác được với nó thì cần cấu hình lên Webserver, cụ thể là IIS, trước đây Tui có hướng dẫn các bạn cách tạo lên somee.com, các bạn có thể xem lại bài hướng dẫn này ở đây

Trong bài này Tui sẽ hướng dẫn các bạn từng bước cài đặt lên IIS Server ở máy local của các bạn, việc test trên máy local cũng khá quan trọng vì khi test hoàn chỉnh xong thì ta mới publish ra ngoài.

Dưới đây là chi tiết từng bước cách dựng IIS Server và cách triển khai FoodServer lên IIS này (Tui setup trên Win 10, 64 bit)

Bước 1: Vào Control panel chọn Programs and Features

h71-0Bước 2: Chọn Turn Windows features on or off:

h71-1Bước 3: Tiến hành lựa chọn để cài IIS Web Server theo màn hình dưới đây:

h71-2Sau khi lựa chọn giống như khung khoanh màu đỏ, nhấn OK để tiến hành cài đặt, tùy thuộc vào máy mà chương trình có thể cài từ 5-10 phút.

Bước 4: Sử dụng IIS Web Server:

Sau khi cài xong IIS Web Server, bạn quay lại màn hình Control panel, bạn sẽ thấy Administrative Tools:

h71-3Bạn click vào biểu tượng Administrative Tools, ta có giao diện tiếp theo:

h71-4Bạn chọn “Internet Information Services (IIS) Manager” như hình trên:

h71-5Trong màn hình quản trị bạn thấy có 2 vùng: Application Pools và Default Web site.

Bước 4.1 Cấu hình Application Pools:

Application Pool là gì?
Application Pool có thể chứa một hoặc nhiều ứng dụng và cho phép chúng ta cấu hình cấp độ giữa các ứng dụng web khác nhau. Ví dụ, nếu bạn muốn cô lập tất cả các ứng dụng web chạy trong cùng một máy, bạn có thể làm điều này bằng cách tạo ra Application Pool riêng biệt cho mỗi ứng dụng web và đặt chúng trong Application Pool tương ứng. Bởi vì mỗi Application Pool chạy trong quá trình làm việc riêng của mình, các lỗi trong Application Pool sẽ không ảnh hưởng đến các ứng dụng đang chạy trong Application Pool khác. Triển khai ứng dụng trong Application Pool là lợi thế chính của IIS trong quá trình làm việc ở chế độ cách ly bởi vì bạn có thể tùy chỉnh Application Pool để đạt được cấp độ tách biệt ứng dụng mà bạn cần.
Khi bạn cấu hình Application Pool để sẵn sàng tối ưu, bạn cũng nên xem xét làm thế nào để cấu hình Application Pool bảo mật ứng dụng. Ví dụ, bạn có thể cần phải tạo ra Application Pool riêng cho ứng dụng đòi hỏi mức độ bảo mật cao, trong khi cho phép các ứng dụng đòi hỏi một mức độ thấp hơn của bảo mật để chia sẻ cùng Application Pool.
Bạn bấm chuột phải vào màn hình Application Pools/ chọn Add Application Pool… như hình dưới đây:h71-6Màn hình tạo mới Application Pool hiển thị lên, ta nhập “FoodServer_Pool” rồi bấm OK:
h71-7Sau khi bấm OK, bạn quan sát:
h71-8Ở màn hình trên bạn tiếp tục chọn Advanced Settings.. cho FoodServer_Pool:
h71-9Bạn cần chỉnh ApplicationPoolIdentity qua LocalSystem.
Bước 4.2: Cấu hình WebService lên IIS Server
Bấm chuột phải vào Default Web Site / chọn Add Application
h71-10
Màn hình hiển thị Add Application:
h71-11Mục Alias (1): Đặt tên cho Service, ở đây ta đặt foodserver
Mục Application pool (2): Nhấn nút Select… và chọn đúng FoodServer_Pool
Mục Physical path (3): Trỏ tới đường dẫn chứa source code của project
Sau đó bấm OK để tạo.
Bạn quan sát kết quả:
h71-12http://localhost/foodserver/api/food chính là kết quả sau khi cấu hình xong. Tới đây hệ thống đã chạy 24/24.
Các bạn có thể dùng Postman và HttpRequester để test HttpPost, HttpGet, HttpPut và HttpDelete.
Các bạn chú ý rằng khi từ Mobile kết nối tới Web Service này thì không thể dùng localhost (vì nó lầm tưởng là của chính mobile), đo dó bạn cần đưa localhost về 1 địa chỉ IP để test.
Cách lấy địa chỉ IP của máy local của ta:
– Nhấn tổ hợp phím có biểu tượng Windows + R để mở cửa sổ Run:
h71-13– gõ lệnh cmd, màn hình command line hiển thị lên, tiếp tục gõ lệnh ipconfig
h71-14Ở trên máy local của Tui có địa chỉ IP: 192.168.100.3
Bây giờ Tui thay thế cho localhost:
h71-15Như vậy ta cũng có được kết quả mong muốn.
Các bạn cố gắng cấu hình để được kết quả như trên.
Bài sau Tui sẽ hướng dẫn cách tương tác từ Mobile Android lên RESTful WebService, các bạn chú ý theo dõi.
Chúc các bạn thành công!

Bài 70: Xây dựng Web Service dùng API RESTful Service(phần 3)


Trong bài này Tui hướng dẫn các bạn cách sử dụng 2 công cụ HttpRequester (firefox addon) và Postman (chrome addon) . Các bạn cần nắm rõ bài 68bài 69 để hiểu và triển khai được Web API RESTful.

  1. Cách sử dụng HttpRequester.

Bạn mở trình duyệt Firefox, vào google tìm từ khóa “httprequester addon” hoặc vào link: https://addons.mozilla.org/en-US/firefox/addon/httprequester/, bạn nhấn Add to Firefox:

h70-0Bạn tiến hành cài, cài xong khởi động lại trình duyệt Firefox, nhìn vào góc phải trên cùng trình duyệt:

h70-1Bạn bấm vào biểu tượng đó, chương trình HttpRequester sẽ xuất hiện như hình dưới đây:

h70-2Mục URL: Nhập URL Web API của bạn vào (http://localhost:8888/api/food). Bạn nhấn GET, chương trình sẽ lấy toàn bộ danh sách Food vào màn hình bên phải (bạn quan sát sẽ thấy).

Để Test lấy 1 Food theo mã nào đó bạn làm như sau:

h70-3Bạn vào tab Parameters, nhập tên biến + giá trị rồi nhấn Add. Sau đó bấm nút GET để lấy dữ liệu, như bạn quan sát đó Tui nhập id=15 thì chương trình lấy ra được Food “Hột mít vùi tro”.

-Test HTTP POST:

h70-4Đối với POST bạn cũng vào Parameters, nhập đủ parameters (phải giống như viết trong Web API), sau đó nhấn nút “POST”, bạn thấy kết quả trả về là true—> tức là thêm thành công. Bạn có thể test lại chức năng HTTP GET để xem lại kết quả thêm mới này.

Trường hợp PUT tương tự bạn tự làm.

Giờ Tui làm tiếp trường hợp Delete:

h70-5Trong combobox, bạn chọn DELETE, nhập Parameter rồi bấm Submit, thấy kết quả là true==> xóa thành công.

2.Cách sử dụng Postman.

Mở trình duyệt Chrome, tìm từ khóa “postman plugin”, hoặc https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en tiến hành cài đặt, sau khi cài thành công:

h70-6Kích hoạt postman để sử dụng.

Để lấy toàn bộ dữ liệu (HttpGet) ta chọn Get như hình dưới đây:

h70-7Để lấy 1 Food theo mã ta làm theo các bước dưới đây (Ví dụ lấy Food có id=1):h70-8Để sử dụng HttpPost (tạo Food mới) ta làm theo các bước dưới đây:

h70-9Ở trên khi bấm Send, trả về true==> thêm Food thành công.

Để xóa một Food có mã bất kỳ:

h70-10Trên đây là cách sử dụng HttpRequesterPostman, 2 công cụ này rất hiệu quả giúp chúng ta kiểm tra quá trình thực hiện HttpPost,HttpGet,HttpPut,HttpDelete trước khi triển khai vào hệ thống thực.

Chúc các bạn thành công.

Bài 69: Xây dựng Web Service dùng API RESTful Service(phần 2)


Trong bài này Tui sẽ hướng dẫn chi tiết cách tạo Web API (lý thuyết ở đây), cách cấu hình IIS, cách sử dụng công cụ Postman(với những ai dùng chrome), cách sử dụng HttpRequester (với những ai dùng Firefox). PostmanHttpRequester là một trong những công cụ hiệu quả nhất để TEST coding của ta, nếu code của ta pass qua được công cụ này thì có thể kết luận rằng Webservice của ta chắc chắn hoạt động tốt.

Để cho có cảm giác Tui sẽ tạo một cơ sở dữ liệu SQL Server, WebAPI sẽ tương tác dữ liệu này bằng cách sử dụng LinQ to SQL:

Bước 1: Tạo cơ sở dữ liệu tên “dbFood”, có một bảng “Food” gồm 4 cột (id để auto) như dưới đây:

h69-0Các bạn có thể tải SQL Script ở đây để tạo CSDL cho lẹ: http://www.mediafire.com/download/48dkwoqka2e1w07/dbFood.sql

Bước 2: Tiến hành viết Web API

Để tạo Project sử dụng Web API có nhiều cách tạo, ở đây Tui sử dụng cách đơn giản nhất để các bạn bớt rối.

Từ Visual Studio 2013 vào menu File/chọn new/ chọn Project:

h69-1Sau khi chọn Project, màn hình sau xuất hiện:

h69-2Chọn các cấu hình như trên, đặt tên Project là “FoodServer” rồi nhấn OK.

Project mặc định ban đầu như sau:

h69-3Giờ ta tiến hành tạo LinQ to SQL cho CSDL dbFood để dễ xử lý như sau:

Bấm chuột phải vào Project/ chọn :

h69-4Màn hình tạo tên LINQ to SQL hiển thị lên, ta tạo tên rồi nhấn OK:

h69-5(chú ý đôi khi bạn sẽ không thấy LINQ to SQL Classes ở màn hình này), nếu không thấy thì chọn New Item:

h69-6Ta chọn các mục giống như bên dưới, tìm tới LINQ to SQL Classes rồi đặt tên DBFood tương tự như trên:

h69-7Cả 2 cách cuối cùng cũng trạo được DBFood LINQ như sau:

h69-8– Ta tiến hành cấu hình để kéo Cơ sở dữ liệu vào làm các lớp tương tác:

Bạ mở Server Explorer (vào menu View/Server Explorer), bấm chọn theo các bước như bên dưới (lệ thuộc vào Server của bạn mà chọn Server name, User đăng nhập cho phù hợp):

h69-9Khi khi bấm OK, bạn sẽ thấy Server Explorer có thêm mục sau:

h69-10Bạn kéo thả bảng Food vào mục bên phải như hình trên.

Tiếp theo bạn tạo 1 thư mục (tên gì cũng được), ở đây Tui đặt đại tên Controllers (bấm chuột phải vào Project/chọn Add/chọn New Folder):

h69-11Sau khi thư mục Controllers được tạo ra, bạn bấm chuột phải vào Thư Mục này rồi chọn Add/Controller..:

h69-12Sau khi bạn chọn Controller… màn hình sau xuất hiện:

h69-13Ta chọn Web API 2 Controller – Empty rồi bấm Add, Visual sẽ hiển thị màn hình đặt tên cho Controller:

h69-14Mặc định là chữ Default, bây giờ bạn đổi lại thành Food (thường ta làm API cho bảng nào thì lấy tên bảng đó), đó là lý do vì sao Tui đặt là Food:

h69-15Tập tin FoodController.cs sẽ được tạo ra, nhưng ta chỉ lấy Food(bỏ chữ Controller đằng sau đi) để tương tác (đây là cơ chế hoạt động). Ta xem cấu trúc Controller được tạo ra:

h69-16Cấu trúc có gì?

  • File WebApiConfig.cs được sinh ra trong thư mục App_Start, bạn để ý  routeTemplate: “api/{controller}/{id}”, tức là khi ta dùng thì viết: “api/food” để lấy toàn bộ danh sách, hay “api/food/3” để lấy chi tiết  1 Food có mã là 3.
  • File FoodController.cs kế thừa từ ApiController

Bây giờ ta tiến hành viết các chức năng (viết trong file FoodController.cs) :

  • HttpGet: Truy vấn thông tin
  • HttpPost: Thêm mới thông tin
  • HttpPut: Thay đổi thông tin
  • HttpDelete: Xóa thông tin

Trước tiên ta làm HttpGet:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace FoodServer.Controllers
{
public class FoodController : ApiController
{
///

<summary>
/// Dịch vụ lấy toàn bộ Food
/// </summary>


/// <returns></returns>
[HttpGet]
public List<Food> GetFoodLists()
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.ToList();
}
///

<summary>
/// Dịch vụ lấy 1 Food theo khóa chính nào đó
/// </summary>


/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public Food GetFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}
}
}

Chú ý là Web API nó không quan tâm tới tên phương thức (viết tên gì cũng được, nó tự động lấy chính xác Service yêu cầu), (không cho phép trùng tên biến). Ví dụ nếu bạn cố tình tạo thêm 1 hàm:


[HttpGet]
public Food GetFood_test(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}

Khi chạy sẽ báo lỗi ngày (vì hệ thống không quan tâm tên hàm), nó thấy 2 biến id giống nhau ở trên 2 hàm nó sẽ không biết dùng cái nào (vì chúng cùng nhóm HttpGet). Cụ thể là lỗi sau:

Multiple actions were found that match the request:
GetFood on type FoodServer.Controllers.FoodController
GetFood_test on type FoodServer.Controllers.FoodController

Tiếp theo ta viết HttpPost (thêm mới):


///

<summary>
/// Dịch vụ này để thêm mới 1 Food, các thông số gửi từ client lên
/// </summary>


/// <param name="name">tên </param>
/// <param name="type">loại-nhóm</param>
/// <param name="price">đơn giá</param>
/// <returns>true thành công, false thất bại</returns>
[HttpPost]
public bool InsertNewFood(string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
Food food = new Food();
food.name = name;
food.type = type;
food.price = price;
db.Foods.InsertOnSubmit(food);
db.SubmitChanges();
return true;
}
catch
{
return false;
}
}

Để chỉnh sửa thông tin ta viết HttpPut:


///

<summary>
/// Dịch vụ chỉnh sửa thông tin
/// </summary>


/// <param name="id">mã food muốn sửa</param>
/// <param name="name">tên mới</param>
/// <param name="type">loại mới</param>
/// <param name="price">giá mới</param>
/// <returns></returns>
[HttpPut]
public bool UpdateFood(int id,string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x=>x.id==id);
if (food == null) return false;//không tồn tại false
food.name = name;
food.type = type;
food.price = price;
db.SubmitChanges();//xác nhận chỉnh sửa
return true;
}
catch
{
return false;
}
}

Cuối cùng để xóa 1 Food ta viết HttpDelete như sau:


///

<summary>
/// Dịch vụ dùng để xóa Food có id
/// </summary>


/// <param name="id">id muốn xóa</param>
/// <returns></returns>
[HttpDelete]
public bool DeleteFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x => x.id == id);
if (food == null) return false;
db.Foods.DeleteOnSubmit(food);
db.SubmitChanges();
return true;
}

Sau cùng ta có coding tổng hợp của FoodController như sau:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace FoodServer.Controllers
{
public class FoodController : ApiController
{
///

<summary>
/// Dịch vụ lấy toàn bộ Food
/// </summary>


/// <returns></returns>
[HttpGet]
public List<Food> GetFoodLists()
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.ToList();
}
///

<summary>
/// Dịch vụ lấy 1 Food theo khóa chính nào đó
/// </summary>


/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public Food GetFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}
///

<summary>
/// Dịch vụ này để thêm mới 1 Food, các thông số gửi từ client lên
/// </summary>


/// <param name="name">tên </param>
/// <param name="type">loại-nhóm</param>
/// <param name="price">đơn giá</param>
/// <returns>true thành công, false thất bại</returns>
[HttpPost]
public bool InsertNewFood(string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
Food food = new Food();
food.name = name;
food.type = type;
food.price = price;
db.Foods.InsertOnSubmit(food);
db.SubmitChanges();
return true;
}
catch
{
return false;
}
}
///

<summary>
/// Dịch vụ chỉnh sửa thông tin
/// </summary>


/// <param name="id">mã food muốn sửa</param>
/// <param name="name">tên mới</param>
/// <param name="type">loại mới</param>
/// <param name="price">giá mới</param>
/// <returns></returns>
[HttpPut]
public bool UpdateFood(int id,string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x=>x.id==id);
if (food == null) return false;//không tồn tại false
food.name = name;
food.type = type;
food.price = price;
db.SubmitChanges();//xác nhận chỉnh sửa
return true;
}
catch
{
return false;
}
}
///

<summary>
/// Dịch vụ dùng để xóa Food có id
/// </summary>


/// <param name="id">id muốn xóa</param>
/// <returns></returns>
[HttpDelete]
public bool DeleteFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x => x.id == id);
if (food == null) return false;
db.Foods.DeleteOnSubmit(food);
db.SubmitChanges();
return true;
}
}
}

Bây giờ ta tiến hành cấu hình Port để test trên IIS express hoặc bạn cấu hình IIS full. Trong bài này Tui hướng dẫn cách sử dụng IIS Express.

Bạn bấm chuột phải vào FoodServer Project/ chọn Properties:

h69-17Tại màn hình Properties / chọn mục Web:

h69-18Bạn cấu hình như trên, Port tui chỉnh là 8888, bạn chọn Port nào cũng được, nhưng thường là 4 chữ số.

Sau đó bấm Create Virtual Directory:

h69-19Nếu Visual thông báo màn hình trên coi như bạn thành công.

Bây giờ ta thử chức năng HttpGet để lấy toàn bộ Food và lấy 1 Food theo id bất kỳ:

F5 để chạy Project:

h69-20Bạn chỉnh lại: http://localhost:8888/api/food để lấy toàn bộ Food:

h69-21Để lấy 1 Food có mã bất kỳ:

Ví dụ: Lấy Food có mã id=15: http://localhost:8888/api/food/15

h69-22Hoặc: http://localhost:8888/api/food?id=15

h69-23Ta cần phải biết các công cụ để test HttpGet,HttpPost,HttpPutHttpDelete.

Bài kế tiếp Tui sẽ hướng dẫn cách dùng công cụ Postman và HttpRequester để xử lý 4 tác vụ trên.

Bây giờ các bạn hãy làm theo hướng dẫn này để có thể tạo được 1 Web API hoàn chỉnh, test trước phần HttpGet mà Tui đã trình bày ở trên trước.

Các bạn tải source code FoodServer ở đây: http://www.mediafire.com/download/c24sm4hg19v8grz/FoodServer.rar

Chúc các bạn thành công.

Bài 68: Xây dựng Web Service dùng API RESTful Service(phần 1)


Ở các bài trước (.Net Web Service & KSOAP API) Tui có trình bày về cách tạo và sử dụng Web Service bằng .asmx, nó có một số hạn chế nhất định. Trong bài này Tui sẽ trình bày cách tạo web service dùng API RESTful Service, một nền tảng mới được hỗ trợ từ .net version 4.0 trở lên. Những bạn lập trình về thiết bị di động cần phải hiểu được các khái niệm cũng như cơ chế vận hành sử dụng API RESTful, theo Tui thấy nó khá hay và rất tiện lợi trong việc triển khai các dự án liên quan tới tương tác dữ liệu trên Server.

Trước khi triển khai webservice, các bạn cần đọc và hiểu khái niệm qua 4 mục dưới đây:

  1. Giới thiệu về ASP.NET Web API
  2. Giới thiệu cơ bản về RESTful Service
  3. Các nguyên tắc cơ bản để tạo ra RESTful Service
  4. Xây dựng Web Service

1.Giới thiệu về ASP.NET Web API

ASP.NET Web API là ?

Là framework giúp chúng ta tạo ra các Web API API trên nền web (HTTP).

Web API là các dịch vụ Web (Web service) được xây dựng dựa trên HTTP sử dụng mô hình lập trình convention (như ASP.NET MVC).

h68-0Đặc điểm Web API (.NET 4.0 trở lên)

  • Giúp cho việc xây dựng các HTTP service rất đơn giản, nhanh chóng
  • Mã nguồn mở (Open Source) và có thể được sử dụng bởi bất kì client nào hỗ trợ XML, JSON.
  • Hỗ trợ đầy đủ các thành phần HTTP: URI, request/response headers, caching, versioning, content formats.
  • Có thể host trong ứng dụng hoặc trên IIS.
  • Kiến trúc lý tưởng cho các thiết bị có băng thông giới hạn như các thiết bị di động.
  • Định dạng dữ liệu có thể là JSON, XML hoặc một kiểu dữ liệu bất kỳ.
  • Làm mới và hiện đại hóa các mẫu dự án mặc định
  • Mẫu dự án trên điện thoại di động
  • Nhiều tính năng mới để hỗ trợ các ứng dụng di động
  • Tùy chỉnh sinh mã(code).
  • Tăng cường hỗ trợ cho các phương pháp bất đồng bộ
  • Đọc danh sách đầy đủ tính năng trong các ghi chú phát hành

Ưu điểm của Web API

  • Cấu hình đơn giản hơn nhiều so với WCF.
  • Hiệu suất(performance) cao.
  • Hỗ trợ RESTfull đầy đủ.
  • Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test, …
  • Mã nguồn mở (Open source).

2. Giới thiệu cơ bản về RESTful Service

-Là một dịch vụ web đơn giản sử dụng HTTP và tính chất của REST.

-Nó tuân thủ theo 4 nguyên tắc thiết kế cơ bản sau:

  • Sử dụng các phương thức HTTP một cách rõ ràng
  • Phi trạng thái
  • Hiển thị cấu trúc thư mục như URls
  • Chuyển đổi linh hoạt JavaScript Object Notation (JSON) và XML hoặc cả hai.

3. Nguyên tắc cơ bản để tạo ra RESTful Service

4 nguyên tắc thiết kế cơ bản sau:

Nguyên tắc 1: Sử dụng các phương thức HTTP một cách rõ rng

Thiết lập một ánh xạ 1-1 giữa các hành động: tạo, đọc, cập nhật và xoá (CRUD) các quá trình vận hành và các phương thức HTTP:

  • POST (HttpPost) – Tạo một tài nguyên trên máy chủ
  • GET (HttpGet) – Truy xuất một tài nguyên
  • PUT (HttpPut) – Thay đổi trạng thái một tài nguyên hoặc để cập nhật nó
  • DELETE (HttpDelete) – Huỷ bỏ hoặc xoá một tài nguyên

Nguyên tắc 2: Phi trạng thái

Ta xem mô hình giữa trạng thái và phi trạng thái để dễ so sánh:

Mô hình phi trạng thái:

h68-2Mô hình trạng thái:

h68-1Nguyên tắc 3: Hiển thị cấu trúc thư mục như URls

Cấu trúc địa chỉ của RESTful service:

  • Giấu các đuôi tài liệu mở rộng của bản gốc trong máy chủ (.jsp, .php, .asp).
  • Để mọi thứ là chữ thường (thực ra là không phân biệt, nhưng cũng nên tuân thủ để khỏi phải nhớ HOA-thường lung tung).
  • Thay thế các khoảng trống bằng gạch chân hoặc gạch nối (một trong hai loại).
  • Tránh các chuỗi yêu cầu.
  • Thay vì sử dụng mã (404 Not Found) khi yêu cầu địa chỉ cho một phần đường dẫn thì luôn luôn cung cấp một trang mặc định hoặc tài nguyên như một phản hồi.

Nguyên tắc 4: Chuyển đổi JavaScript Object Notation (JSON) và XML hoặc cả hai.

  • Là một bản tóm tắt các thuộc tính của những thứ trong mô hình dữ liệu hệ thống.
  • Định dạng dữ liệu mà ứng dụng và trao đổi dịch vụ trong mức đáp ứng yêu cầu/ phản hồi hoặc trong phần thân của HTTP.
  • Các chủ thể trong mô hình dữ liệu có liên quan với nhau.
  • Cấu trúc dịch vụ sao cho nó tận dụng được phần đầu chấp nhận HTTP có sẵn bên trong – một loại MIME

 

4.Xây dựng Web Service

Tui liệt kê các bước tương đối (chi tiết sẽ trình bày trong bài kế tiếp):

Bước 1:

Khởi động Visual Studio → tạo một project ASP.NET Web Application và chọn template Web API.

Bước 2:

Tạo Data Model sử dụng Entity Framework để Web API service có thể tương tác CRUD (Create, Read, Update, Delete) dữ liệu được (không tạo cũng được).

Bước 3: Tạo ra các Web API

Nhấp chuột phải vào thư mục Controllers và chọn thêm controller.

  • Web API 2 Controller Empty: tự viết các phương thức từ đầu.
  • Web API 2 Controller with read/write actions: phát sinh các phương thức ví dụ để bạn có thể biết cách viết các service này.

Bước 4: Chạy thử và kiểm tra.


Bài kế tiếp Tui sẽ trình bày chi tiết cách tạo Web API service, cách cấu hình cũng như sử dụng Service.

 

Giáo trình Tin Học Văn Phòng Cơ Bản và Nâng cao (Office 2013)


Nhằm giúp sinh viên các ngành không chuyên tin học có thể tự luyện tập và làm chủ Office 2013 , nhóm tác giả cung cấp giáo trình đầy đủ về bộ công cụ Office 2013. Bộ giáo trình gồm: Word, Excel, Power point từ cơ bản tới nâng cao, cuối mỗi cuốn giáo trình sẽ có bộ bài tập để sinh viên có thể nâng cao kỹ năng tin học văn phòng.

  1. Bộ giáo trình Tin Học Office Cơ Bản (http://www.mediafire.com/download/u3vaxa6ose6wn5u/Final_Giao_Trinh_OFFICE2013_CoBan.docx), 259 trang
  2. Bộ giáo trình Tin Học Office Nâng Cao (http://www.mediafire.com/download/itd7y6fsfizb6bu/Final_Giao_Trinh_OFFICE2013_NangCao.docx), 267 trang

Nhóm tác giả:

  • Nguyễn Văn Hùng (hungnhatban@gmail.com)
  • Trần Duy Thanh (duythanhcse@gmail.com)
  • Phạm Thị Xuân Diệu (phamdieucse@gmail.com)
  • Nguyễn Thị Cẩm Hương (mimosadlat@gmail.com)
  • Trần Nguyên Phúc (nguyenphuc9119@gmail.com)

Chúc các bạn thành công!

Tài liệu Xây Dựng Và Triển Khai Web Service Cho Ứng Dụng Di Động


Hiện nay, nhu cầu về sự tương tác giữa người dùng, giữa client – server trong các ứng dụng đang ngày càng nâng cao. Vì vậy, công nghệ Web Service được ra đời nhiều ưu điểm như: Có thể chạy trên nhiều nền tảng khác nhau, sử dụng các giao thức và các chuẩn mở, nâng cao khả năng tái sử dụng…:

webserviceGiáo trình giúp sinh viên có thể:

-Tự xây dựng Web Service hoàn chỉnh sử dụng: LinQ, Entity Framework.

-Triển khai Web Service lên server.

-Tương tác giữa Web Service với ứng dụng trên thiết bị di động.

-Tương tác Web Service với các Web Service khác.

-Tự xây dựng dự án với Web Service hoàn chỉnh.

Chi tiết học liệu: https://duythanhcse.wordpress.com/web-service/

Tổng hợp học liệu Lập Trình Windows Phone


Dear all

Hiện nay Tui đã tổng hợp xong học liệu về lập trình Windows phone, bao gồm Giáo trình, bài tập, slide bài giảng. Các sinh viên có thể tải toàn bộ học liệu tại đây: https://duythanhcse.wordpress.com/windows-phone-8/

Thầy Thanh.

Bài 67: Cài đặt Google Play Service cho máy ảo Genymotion


Trong quá trình viết các dự án liên quan tới Google Play Service (Google Map, Googe Cloud Message…) chạy trên máy ảo Genymotion nhiều bạn gặp vấn đề liên quan tới Google Play Service, ví dụ như hình dưới đây:

h67_0Vì vậy Tui viết hướng dẫn này giúp các bạn giải quyết vấn đề trên.

Bước 1: Tải gapps-lp-20141109-signed.zip (khoảng 155MB) tại trang https://www.androidfilehost.com/?fid=95784891001614559

Bước 2: Kéo thả gapps-lp-20141109-signed.zip vào máy ảo Genymotion:

h67_1Bước 3: Tiến hành cài đặt Genymotion, bước này các bạn cứ chờ cho hệ thống tự động cài đặt, nếu có hỏi gì thì cứ bấm Ok:

h67_2Bước 4: Tiến hành cài đặt/Update Google +

Chú ý ở bước 3 sau khi bạn khởi động lại máy ảo thì bạn sẽ gặp các thông báo lỗi đại loại như hình dưới đây:

h67_3Bạn cứ bấm OK (có thể phải bấm túi bụi mấy lần), để nó ra màn hình Reinstall Google + dưới đây:

h67_4Tới đây bạn bấm OK, hệ thống sẽ hiển thị màn hình đăng nhập Gmail :

h67_5Ở màn hình trên bạn nhập email rồi bấm Next, nó chuyển qua màn hình nhập mật khẩu, bạn nhập tiếp rồi bấm Next:

h67_6Khi đăng nhập thành công bạn sẽ thấy màn hình trên, bạn bấm Accept sau đó tiếp tục bấm Next để qua màn hình cài đặt / update Google +:

h67_7Ở màn hình trên bạn bấm nút Update trước, sau đó bấm nút Accept để tiến hành tải và cài đặt Google +. Bạn chờ cho hệ thống tự động cài đặt (khoảng vài ba phút gì đó), sau khi cài thành công bạn sẽ thấy màn hình dưới đây:

h67_8Tới đây bạn nhấn vào nút Open ở màn hình trên, để qua bước 5 (cài đặt update google play Service).

Bước 5: Cài đặt/Update Google Play Service:

Sau khi bạn bấm nút Open ở bước 4, bạn có thông báo sau:

h67_9Ở màn hình trên bạn bấm các nút Update để tiến hành cập nhật Google Play Service. Sau khi cài đặt thành công bạn sẽ thấy màn hình sau:

h67_10Đồng thời kiểm tra xem trong máy ảo Genymotion có bổ sung thêm mục “Google Setting” hay chưa?:

h67_11==> Đến đây bạn đã cài đặt Google Play Service thành công.

Bước 6: Bật On GPS trong máy ảo Genymotion.

Từ màn hình máy ảo Genymotion, bạn bấm vào nút có chữ GPS, rồi bật On như màn hình dưới đây:

h67_12Bây giờ bạn có thể chạy phần mềm nào có liên quan tới Google Play Service mà bạn đã viết, nó sẽ không còn báo lỗi như hình đầu tiên tui chụp, bạn sẽ được kết quả như sau:

h67_13

Bạn chú ý là sử dụng máy ảo Genymotion có phiên bản mới mới gần nhất giùm Tui nhé, những bản từ thời Lạc Long Quân tán Âu Cơ thì bỏ đi.

Chúc các bạn thành công.

Bài 66: Cách vẽ các loại biểu đồ trong Android bằng AChartEngine


Trong quá trình viết dự án nhiều khi chúng ta phải làm các chức năng thống kê, mà thống kê hay nhất theo Tui là dùng biểu đồ với những hình ảnh trực quan sinh động sẽ lột tả được ý nghĩa của dữ liệu thống kê. Vì vậy loạt bài sau Tui sẽ hướng dẫn các bạn cách sử dụng framework AChartEngine để thực hiện tính năng này, trên mạng đã có nhiều Video hướng dẫn rất chi tiết các bạn có thể tham khảo step by step (bằng tiếng anh – xin cảm ơn tác giả):
Các bạn có thể tải demo tại đây http://www.achartengine.org/content/demo.html

Tải các thư viện tại đây: http://www.achartengine.org/content/download.html (https://code.google.com/p/achartengine/downloads/list)

Tui sẽ đan xen cách vẽ biểu đồ từ dữ liệu Sqlite, excel, webservice thay vì hardcode giống như bản demo.

Bạn xem qua một số ứng dụng cụ thể về các loại biểu đồ và Framework AchartEngine cung cấp như sau:

-Line chart:

Chart image inside view group

-Average temperature:

Average temperature chart image

Average temperature chart landscape image

-Monthly Sale Report:

Sales bar chart image  Sales bar chart landscape image

-Trigonometric functions:

Trigonometric chart image  Trigonometric chart landscape image

-Scatter Chart:

Scatter chart image  Scatter chart landscape image

– Monthly Sale Report (conts):

Sales line and area chart image  Sales line and area chart landscape image

-Project Work Status:

Project status chart image

Project status chart landscape image-Sale Growth:

Sales growth chart image  Sales growth chart landscape image

-budget:

Projects budget chart image

Projects budget chart landscape image – Các bạn hãy thử làm quen với cách sử dụng thư viện AchartEngine với dữ liệu hardcode trước, Tui sẽ tranh thủ bổ sung cách hiển thị Chart từ Sqlite, Excel Webservice.

– (còn nữa…)

Follow

Get every new post delivered to your Inbox.

Join 1,174 other followers

%d bloggers like this: