Hướng dẫn gọi webservice trong php

Hướng dẫn gọi webservice trong php

Trong bài viết này mình sẽ hướng dẫn các bạn tạo Web Service bằng PHP và MYSQLđơn giản, cơ bản cho những bạn mới bắt đầu tìm hiểu về web service và PHP, cụ thể là web service trong android và hướng dẫn parse json bằng thư viện retrofit với web service đã tạo.Bạn đã từng nghe về web servicechưa, web service là gì và cách hoạt động của nó như thế?

Hướng dẫn gọi webservice trong php

Tạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 1

Web services là gì ?

Web service là một tập các phương thức được gọi thực hiện từ xa thông qua một địa chỉ http url. Kết quả trả về của web service thường dưới dạng json hoặc xml. Web service thường được sử dụng để tạo các ứng dụng phân tán.

Bạn đang xem: Gọi webservice trong php và mysql, gọi một rest api trong php

Web service cho phép bạn giao tiếp qua mạng, không phải P2P. Nó cung cấp API cho phép bạn sử dụng nó để tương tác với service hoặc bạn có thể tự tạo web service bằng PHP và MYSQL như trong bài viết này.Ví dụ bạn dùng một ứng dụng di động, ứng dụng desktop, web. Thì các ứng dụng đó gửi thông tin lên webservice rồi webservice xử lý dữ liệu bạn gửi từ app đến sever và sever xử lý xong nó sẽ trả về các dữ liệu cho bạn bằng json hay xml, để xử lý dữ liệu ở app bạn sẽ phải parse json hay parse xml.

Đặc điểm của web service

Chi phí thấp, dễ bảo trìCó thể được được truy cập từ bất kỳ ứng dụng nàoKhông phụ thuộc vào ngôn ngữ lập trình: PHP, JAVA, .NET,…Hỗ trợ thao tác giữa các thành phần không đồng nhất

Tạo web service bằng PHP và MYSQL

Trước tiên để tạo web service bằng php và mysql thì bạn cần phải có server hỗ trợ ngôn ngữ php và mysql. Nếu bạn nào có chưa có hosting thì có thể tạo localhost với Xampp hoặc WampServer, các bạn không nên sử dụng hosting free vì những hosting free thường có chứa quảng cáo, khi bạn code trả về Json nó thường kèm theo các quảng cáo này gây khó khăn cho chúng ta trong việc xử lý. Trong hướng dẫn này mình dùng WampServer.

B1:Tạo một database là students_managervà bảng là studentsbao gồm các trường : id, name, age, nclass.

Sau khi cài wampserver thành công bạn vào đường dẫnhttp://localhost/phpmyadmin, userroot, pass để trống, chọn tab SQL và pase vào đoạn code sau.

#Create databaseCREATE DATABASE students_manager;#Create Table studentsCREATE TABLE students_manager.students( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `age` INT(5) NOT NULL, `nclass` VARCHAR(10) NOT NULL, PRIMARY KEY(`id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;#Insert dataINSERT INTO students_manager.students(`id`, `name`, `age`, `nclass`) VALUES(1, "Nguyễn Văn A", "20", "KT10"),(2, "Nguyễn Văn B", "21", "DT5"),(3, "Nguyễn Văn C", "20", "KT10"),(4, "Nguyễn Văn D", "21", "DT5"),(5, "Nguyễn Văn E", "21", "CK2")B2: Tạo file php đặt tên là api.phpđể file này trong thư mục www của WampServerC:wamp64wwwstudent_managerapi.php

Để lấy tất cả danh sách studentsvà trả về Json.

= 1) {while ($row = mysql_fetch_assoc($resouter)) { $temparray<> = $row; } } echo json_encode($temparray);?>Bạn vào đường dẫn sau để xem kết quả:http://localhost/student_manager/api.php. Hoặc các bạn có thể cài ứng dụng Postmannày trên chrome để có thể tùy biến xem kết quả dễ hơn, link trên trình duyệt chỉ có thể sử dụng được phương thức GET nhưng trên app này có thể sử dụng được nhiều phương thức khác nữa: GET, POST, PUT, PATCH, DELETE… rất hữu ích.

Xin lỗi các bạn vì có thể bạn thấy trong hình có trường class, nhưng trong sql thì không có, lý do là mình vừa sửa lại database 1 chút thành nclass :D.

Hướng dẫn gọi webservice trong php

Xem kết quả trả về Json

Hướng dẫn gọi webservice trong php

Xem kết quả ở định dạng Json trong Postman

Bạn chỉnh sửa thêm trong file api.php cho giống như dưới

= 1) {while ($row = mysql_fetch_assoc($resouter)) { $temparray<> = $row; } } echo json_encode($temparray);end:?>Để xem kết quả bạn chỉ cần thêm ?id=vào sau link lúc nãyhttp://localhost/student_manager/api.php?id=1. Nếu bạn để id trống http://localhost/student_manager/api.php?id=nó sẽ trả vềVui lòng nhập id.

Xem thêm: get strtotime php

Sau khi đã có Json bạn có thể parse json bằng retrofit trong android mình đã nói ở bài trước.

Json parsing with Retrofit

Hướng dẫn gọi webservice trong php

Json parsing with Retrofit

B1:Mở Android studiovà tạo một project mới đặt tên WebService

B2:Thêm thư viện retrofit vào dependencies (Module: app)

dependencies {... // Retrofit compile "com.squareup.retrofit2:retrofit:2.2.0" // JSON Parsing compile "com.google.code.gson:gson:2.8.0" compile "com.squareup.retrofit2:converter-gson:2.2.0"...}

B3:Thêm quyền truy cập INTERNET vàoAndroidManifest.xml

B4:Tạo layout cho activity_main.xml

B5:Tạo Object class đặt tên Student và để trong package models

Các thuộc tính của class Student giống y chang như các trường của database, cái hạn chế của parse json bằng Retrofit nó nằm ở đấy, tổ chức cấu trúc của Json như thế nào thì trong đối tượng trong Android phải y như thế đấy. Mình mới nghiên cứu cái thư viện này thấy như thế, không biết là có pro nào làm việc nhiều với thư viện này có cách xử lý khác không rất mong được chỉ giáo, xin cảm ơn rất nhiều.

Cũng vì lý do này nên mình mới sửa class –> nclass, do lúc đầu mình tạo database là class nên đối tượng trong android cũng phải đặt theo class. Mà đặt tên thuộc tính của đối tượng là class trong android là không được phép, sẽ thông báo lỗi ngay, mà chỉ sửa class –> nclass trong android thì sẽ không parse được trường class trên webservice. Nên chỉ sửa 1 chút trên database với trong android là ok.

Override public String toString() { return "Student{" + "id=" + id + ", name="" + name + """ + ", age=" + age + ", nclass="" + + """ + "}"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getNclass() { return nclass; } public void setNclass(String nclass) { this.nclass = nclass; }}

B6: Tạo classRetrofitClient

Để sử dụng các yêu cầu mạng đến một RESTful API bằng Retrofit, chúng ta cần tạo ra một đối tượng bằng cách sử dụng lớp Retrofit Builder và cấu hình nó với một URL cơ sở.

Ở APIService Interface này, chỗgetStudent(
Query
của thư viện Retrofit để truy vấn dữ liệu ở ?id=..theo như link trên browser là http://localhost/student_manager/api.php?id=.., ví dụ bạn muốn lấy student theo id và lớp chẳng hạn, bạn sẽ viết thành getStudent(
Query(“nclass”) String nclass)
, link trên browser sẽ làhttp://localhost/student_manager/api.php?id=…?nclass=…

Ở đây còn một vấn đề nữa, Call> getStudent(
Query(“id”) String id);
chỉ lấy một Student theo id mà tại sao lại cần dùngList. Lý do là lúc mình code service trả về Json là một Json Array mà 1 array thì sẽ có nhiều object nên Retrofitnó sẽ hiểu và trong android bắt buộc phải đểCall> mặc dù trong Json Array đó chỉ có 1 Object. Nếu bạn muốn chỉ gọiCall thì lúc Service trả về Json phải là 1 Json Object.

GET("/student_manager/api.php") Call> getStudents(); // GET student by id student from server // Server return json object
Query("id") String id);}

B8: Tạo classApiUtils

ClassApiUtils dùng để khởi tạo Retrofit trong MainActivity và gọi các phương thức trong InterfaceAPIService.

Ở đây mình chạy trên Emulator nên url mình để làhttp://10.0.2.2 còn nếu bạn chạy trên Genymotion sẽ đổi thànhhttp://10.0.2.3

Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnGetStudent = (Button) findViewById(R.id.btnGetStudent); btnGetStudents = (Button) findViewById(R.id.btnGetStudents); tvResult = (TextView) findViewById(R.id.tvResult); mAPIService = ApiUtils.getAPIService(); btnGetStudent.setOnClickListener(this); btnGetStudents.setOnClickListener(this); }

B9: Set sự kiện OnClick cho 2 Button

Override public void onClick(View v) { switch (v.getId()) { case R.id.btnGetStudent: getStudentById(); break; case R.id.btnGetStudents: getAllStudents(); break; } } private void getAllStudents() { mAPIService.getStudents().enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { String result = ""; for (int i = 0; i > call, Throwable t) { Log.d("onFailure", t.toString()); } }); } private void getStudentById() { mAPIService.getStudent("1").enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { tvResult.setText("ID: " + response.body().get(0).getId() + "nName: " + response.body().get(0).getName() + "nAge: " + response.body().get(0).getAge() + "nClass: " + response.body().get(0).getNclass()); } catch (Exception e) { Log.d("onResponse", "Error"); e.printStackTrace(); } }
Override public void onFailure(Call> call, Throwable t) { Log.d("onFailure", t.toString()); } }); }Code file MainActivity

package com.dev4u.ntc.webservice;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.dev4u.ntc.webservice.models.Student;import com.dev4u.ntc.webservice.webservice.APIService;import com.dev4u.ntc.webservice.webservice.ApiUtils;import java.util.List;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnGetStudent; private Button btnGetStudents; private TextView tvResult; private APIService mAPIService;
Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnGetStudent = (Button) findViewById(R.id.btnGetStudent); btnGetStudents = (Button) findViewById(R.id.btnGetStudents); tvResult = (TextView) findViewById(R.id.tvResult); mAPIService = ApiUtils.getAPIService(); btnGetStudent.setOnClickListener(this); btnGetStudents.setOnClickListener(this); }
Override public void onClick(View v) { switch (v.getId()) { case R.id.btnGetStudent: getStudentById(); break; case R.id.btnGetStudents: getAllStudents(); break; } } private void getAllStudents() { mAPIService.getStudents().enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { String result = ""; for (int i = 0; i > call, Throwable t) { Log.d("onFailure", t.toString()); } }); } private void getStudentById() { mAPIService.getStudent("1").enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { tvResult.setText("ID: " + response.body().get(0).getId() + "nName: " + response.body().get(0).getName() + "nAge: " + response.body().get(0).getAge() + "nClass: " + response.body().get(0).getNclass()); } catch (Exception e) { Log.d("onResponse", "Error"); e.printStackTrace(); } }
Override public void onFailure(Call> call, Throwable t) { Log.d("onFailure", t.toString()); } }); }}Xem hướng dẫnTạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 2

Project on Github:https://github.com/trongcong/WebServiceAndroid

Json parsing, Parse json trong android, Parse Json với Retrofit, Tạo web service, Web service android, Webservice với PHP
Related PostGom Marker trong Android với Google Maps Android API – Google Maps Android Marker Clustering UtilitySử dụng SwipeRefreshLayout trong ứng dụng AndroidHướng dẫn tạo Material Dialog Bottom Sheet AndroidTạo context menu trong Android – ActionBar ActionMode.CallBack ExampleRetrofit và Volley thư viện nào tốt hơnHướng dẫn sử dụng thư viện Volley trong AndroidTạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 2Hàm chuyển đổi Timestamp thành Datetime trong Android và JavaScriptDesign Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 2)Design Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 1)

  • Dein erste schritte, php script mit html ausführen
  • Php unserialize to json online
  • Required textarea php
  • Insert mysql from php